본문 바로가기

Language/Spring Security

요청 기반 인가 관리자 - AuthorityAuthorizationManager 외 클래스 구조 이해

728x90
  • 스프링 시큐리티는 요청 기반의 인증된 사용자 및 특정 권한을 가진 사용자의 자원 접근 허용 여부를 결정하는 인가 관리자 클래스들을 제공
  • 대표적으로 AuthorityAuthorizationManager, AuthenticatedAuthorizationManager와 대리자인 RequestMatcherDelegatingAuthorizationManager

스프링 시큐리티 인가 처리

http.authorizeHttpRequests(auth -> auth
			.requestMatchers("/user").hasRole("USER")
  • /user 엔드포인트 접근인증 객체에서 ROLE_USER 권한을 필요로 함
    • Request → /user 엔드포인트 접근
    • Authentication → 인증 객체
    • ROLE_USER 권한 → GrantedAuthority

내부 구조 이해

  1. 시큐리티 설정을 한 아래의 내용을 어딘가에 맵핑을 해둠
    • requestMathchers(”/user”,”/myPage”).hasAuthority(”USER”)
      → /user와 /myPage에 대한 요청은 USER 권한이 필요
    • requestMathchers(”/admin”).hasRole(”ADMIN”)
      → /admin에 대한 요청은 ADMIN 권한이 필요
  2. 클라이언트 요청
  3. 인가처리 필터(AuthorizationFilter)가 요청을 받아 SecurityContextHolder로부터 현재 접속한 사용자의 인증 객체를 가지고 옴
  4. request(요청 정보)와 인증 정보(인증 객체)인가 관리자(RequestMatcherDelegatingAuthorizationManager)에게 전달
  5. 요청 패턴을 기준으로 적절한 인가 관리자를 호출
    • 위에서 맵핑한 내용을 RequestMatcherDelegatingAuthorizationManager가 가지고 있음
    • 요청이 오면 어떤 권한이 필요한 지뿐만 아니라 해당 요청을 어떤 Manager가 처리를 해줄 것인가 라는 정보까지 가지고 있음
    • 적절한 인가 관리자를 호출하는 기준
      • hasAuthority, hasRole API에 대해서는 AuthorityAuthorizationManager가 처리
      • access API에 대해서는 WebExpressionAuthorizationManager가 처리
      • 그 외에 anyRequst()에 대해서는 인증을 받아야하기 때문에 AuthenticatedAuthorizationManager가 처리
  6. 위임을 받은 Manager는 최종적으로 AuthorizationDecision을 반환
    • 반환된 값이 true라면 요청 자원에 접근
    • 반환된 값이 false라면 AceessDeniedException을 발생하여 거부하고 예외 처리

AuthenticatedAuthorizationManager 구조

  • 인증 상태만 확인
    • 인증 성공 ⇒ 허용
    • 인증 실패 ⇒ 거부
  • AuthenticatedAuthorizationManager는 내부적으로 네 개의 AbstractAuthorizationStrategy 구현을 통해 인증 여부 확인 전략을 세움

AuthenticatedAuthorizationManager 매핑

  • requestMatcher에는 URL 패턴 저장
  • entry에는 request에 맞는 Manager를 를 호출

AuthenticatedAuthorizationManager 흐름도


AuthorityAuthorizationManager 구조

  • 특정 권한을 보고 허용, 거부를 결정하는 클래스
  • AuthorityAuthorizationManager는 내부적으로 AuthoritiesAuthorizationManager를 사용하여 권한 여부 결정을 위임

AuthorityAuthorizationManager 매핑

  • 매핑은 엔드포인트를 기준으로 매핑되어, 총 5개가 매핑
  • AuthorityAuthorizationManager 는 매핑된 요청 패턴과 권한 정보를 사용하여 사용자의 요청 정보와 Authentication 권한을 비교해서 서로 일치하는지 검사

AuthorityAuthorizationManager 흐름도

728x90