본문 바로가기

Language/Spring Security

인가 관리자 이해 - AuthorizationManager

728x90
  • AuthorizationManager인증된 사용자가 요청 자원에 접근할 수 있는지 여부를 결정하는 인터페이스로서 인증된 사용자의 권한 정보와 요청 자원의 보안 요구 사항을 기반으로 권한 부여 결정을 내림
  • AuthorizationManager는 Spring Security의 요청 기반, 메소드 기반의 인가 구성 요소에서 호출되며 최종 액세스 제어 결정을 수행
  • AuthorizationManager는 Spring Security의 필수 구성 요소로서 권한 부여 처리는 AuthorizationFilter를 통해 이루어지며 AuthorizationFilter는 AuthorizationManager를 호출하여 권한 부여 결정을 내림

구조

  • check()
    • 권한 부여 결정을 내릴 때 필요한 모든 관련 정보(인증객체, 체크 대상[권한정보, 요청정보, 호출정보 등..])가 전달
    • 액세스가 허용되면 true를 포함하는 AuthorizationDecision, 거부되면 false를 포함하는 AuthorizationDecision, 결정을 내릴 수 없는 경우 null 을 반환
  • verify() → 사용 해도 되고 하지 않아도 됨
    • check를 호출해서 반환된 값이 false 가진 AuthorizationDecision인 경우 AccessDeniedException을 throw

AuthorizationManager 클래스 계층 구조

  • RequestMatcherDelegatingAuthorizationManager는 아래 3개의 Manager들을 참조
    • 실질적인 권한 심사를 하는 클래스가 아니라 클라이언트가 요청을 하게 되면 요청에 대해 가장 적합한 구현체(Manager)에게 위임(실행)하는 역할
  • 메서드 기반 권한 부여 관리자는 AOP로 되어 있음
    • AOP를 수행하기 위해 Interceptor, Pointcut, Advice와 같은 클래스들이 사용되어 Manager들과 연계하여 메서드 기반의 로직들을 수행

AuthorizationManager 구현체 종류 및 특징

요청 기반 권한 부여 관리자

  • RequestMatcherDelegatingAuthorizationManager
    • 인가 설정에서 지정한 모든 요청패턴과 권한 규칙을 매핑한 정보를 가지고 있으며 권한 검사 시 가장 적합한 AuthorizationManager 구현체를 선택해 위임
  • AuthenticatedAuthorizationManager
    • 인증된 사용자에게 접근을 허용 ⇒ 인증되지 않으면 접근 거부
    • 이 클래스는 사용자가 시스템에 로그인했는지 여부를 기준으로 결정
  • AuthorityAuthorizationManager
    • 특정 권한을 가진 사용자에게만 접근을 허용 (가장 많이 사용)
    • 주로 사용자의 권한(예: ROLE_USER, ROLE_ADMIN)을 기반으로 접근을 제어
  • WebExpressionAuthorizationManager
    • 웹 보안 표현식을 사용하여 권한을 관리
    • 예를 들어, "hasRole('ADMIN')" 또는 "hasAuthority('WRITE_PERMISSIONS')"과 같은 표현식을 사용 가능

메서드 기반 권한 부여 관리자

  • PreAuthorizeAuthorizationManager
    • 메소드 실행 전에 권한을 검사
    • @PreAuthorize 어노테이션과 함께 사용되며, 메소드 실행 전 사용자의 권한을 확인
  • PostAuthorizeAuthorizationManager
    • 메소드 실행 후에 권한을 검사
    • @PostAuthorize 어노테이션과 함께 사용되며, 메소드 실행 후 결과에 따라 접근을 허용하거나 거부
  • Jsr250AuthorizationManager
    • JSR-250 어노테이션(@RolesAllowed, @DenyAll, @PermitAll)을 사용하여 권한을 관리
  • SecuredAuthorizationManager
    • @Secured 어노테이션을 사용하여 메소드 수준의 보안을 제공
    • 특정 권한을 가진 사용자만 메소드에 접근할 수 있도록 함
728x90