728x90
- 스프링 시큐리티는 요청 기반의 인증된 사용자 및 특정 권한을 가진 사용자의 자원 접근 허용 여부를 결정하는 인가 관리자 클래스들을 제공
- 대표적으로 AuthorityAuthorizationManager, AuthenticatedAuthorizationManager와 대리자인 RequestMatcherDelegatingAuthorizationManager
스프링 시큐리티 인가 처리
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/user").hasRole("USER")
- /user 엔드포인트 접근은 인증 객체에서 ROLE_USER 권한을 필요로 함
- Request → /user 엔드포인트 접근
- Authentication → 인증 객체
- ROLE_USER 권한 → GrantedAuthority
내부 구조 이해
- 시큐리티 설정을 한 아래의 내용을 어딘가에 맵핑을 해둠
- requestMathchers(”/user”,”/myPage”).hasAuthority(”USER”)
→ /user와 /myPage에 대한 요청은 USER 권한이 필요 - requestMathchers(”/admin”).hasRole(”ADMIN”)
→ /admin에 대한 요청은 ADMIN 권한이 필요
- requestMathchers(”/user”,”/myPage”).hasAuthority(”USER”)
- 클라이언트 요청
- 인가처리 필터(AuthorizationFilter)가 요청을 받아 SecurityContextHolder로부터 현재 접속한 사용자의 인증 객체를 가지고 옴
- request(요청 정보)와 인증 정보(인증 객체)를 인가 관리자(RequestMatcherDelegatingAuthorizationManager)에게 전달
- 요청 패턴을 기준으로 적절한 인가 관리자를 호출
- 위에서 맵핑한 내용을 RequestMatcherDelegatingAuthorizationManager가 가지고 있음
- 요청이 오면 어떤 권한이 필요한 지뿐만 아니라 해당 요청을 어떤 Manager가 처리를 해줄 것인가 라는 정보까지 가지고 있음
- 적절한 인가 관리자를 호출하는 기준
- hasAuthority, hasRole API에 대해서는 AuthorityAuthorizationManager가 처리
- access API에 대해서는 WebExpressionAuthorizationManager가 처리
- 그 외에 anyRequst()에 대해서는 인증을 받아야하기 때문에 AuthenticatedAuthorizationManager가 처리
- 위임을 받은 Manager는 최종적으로 AuthorizationDecision을 반환
- 반환된 값이 true라면 요청 자원에 접근
- 반환된 값이 false라면 AceessDeniedException을 발생하여 거부하고 예외 처리
AuthenticatedAuthorizationManager 구조
- 인증 상태만 확인
- 인증 성공 ⇒ 허용
- 인증 실패 ⇒ 거부
- AuthenticatedAuthorizationManager는 내부적으로 네 개의 AbstractAuthorizationStrategy 구현을 통해 인증 여부 확인 전략을 세움
AuthenticatedAuthorizationManager 매핑
- requestMatcher에는 URL 패턴 저장
- entry에는 request에 맞는 Manager를 를 호출
AuthenticatedAuthorizationManager 흐름도
AuthorityAuthorizationManager 구조
- 특정 권한을 보고 허용, 거부를 결정하는 클래스
- AuthorityAuthorizationManager는 내부적으로 AuthoritiesAuthorizationManager를 사용하여 권한 여부 결정을 위임
AuthorityAuthorizationManager 매핑
- 매핑은 엔드포인트를 기준으로 매핑되어, 총 5개가 매핑
- AuthorityAuthorizationManager 는 매핑된 요청 패턴과 권한 정보를 사용하여 사용자의 요청 정보와 Authentication 권한을 비교해서 서로 일치하는지 검사
AuthorityAuthorizationManager 흐름도
728x90
'Language > Spring Security' 카테고리의 다른 글
인가 설정 응용 - RequestMatcherDelegatingAuthorizationManager (0) | 2024.08.01 |
---|---|
요청 기반 Custom AuthorizationManager 구현 (0) | 2024.08.01 |
인가 관리자 이해 - AuthorizationManager (0) | 2024.08.01 |
인가 - Authorization (0) | 2024.08.01 |
계층적 권한 - RoleHireachy (0) | 2024.07.31 |