springframework/시작하자SpringSecurity

22.Authorization, FilterSecurityInterceptor

Jungsoomin :) 2020. 9. 22. 21:59

Authorization

무엇이 허가되었는지 증명하는 것이다.

 

  1. SpringSecurityAuthentication Authorization 으로 영역을 나눈다.

  2. Authentication 영역에서는 사용자자원에 접근하기위해 Request 를 보낼 때 인증 여부를 확인한다.

  3. Authorization 영역에서는 인증이 완료 된 후 사용자특졍 자원에 접근할 때사용자의 권한특정 자원의 접근 권한충분하는 지의 심사를 한다.


SpringSecurity 가 지원하는 권한 계층

 

 

  • 계층 : Presentation Tier 의 URL 요청 단위 레벨 보안

  • 서비스 계층 : Service Tier 의 메서드 단위 레벨 보안

  • 도메인 계층(Access Control List, 접근 제어 목록) : Persistence Tier 의 영속 영역 접근 시의 사용할

    객체단위 레벨 보안

현재는 웹 계층과 서비스 계층 보안에 대해 다룬다.

 


FilterSecurityInterceptor

아래 이미지는 FilterChainProxyFilter 명단

  • FilterChainProxy Filter Type Bean마지막에 위치한 Filter

  • 특정 자원에 대한 요청승인, 거부 를 최종적으로 결정한다.

  • Authentication 객체 없이 보호된 자원에 접근할 경우 AuthenticationException 발생 ( ExceptionTranslationFilter > AuthenticationEntryPoint )

  • 인증 후 자원 접근 권한이 없을 경우 AccessDeniedException 발생 (Anonymous or RememberMe  , 권한 부족시로 분기)

  • 권한 제어 방식HTTP 자원의 보안을 처리

  • 권한 처리를 AccessDecisionManager에게 위임


FilterSecurityInterceptor 의 동작 구조

 

 

  1. 사용자Request

  2. FilterSecurityInterceptor 동작

  3. FilerSecurityInterceptorAuthentication 객체 존재 여부 확인

  4. Authentication 객체가 존재하지 않을 시 AuthenticationExcpetion 발생( ExceptionTranslationFilter > AuthenticationEntoryPoint )

  5. Authentication 객체가 존재할 시 SecurityMetadataSource 호출

  6. SecurityMetadataSource 요청자원에 Mapping 된 Authoritynull인지 여부를 검사

  7. 자원에 Mapping된 Authoritynull 일 경우 자원접근 허용

  8. 자원에 Mapping 된 Authoritynull이 아닐 경우 AccessDecisionManager 작동

  9. AccessDecisionManager AccessDecisionVoter 에게 심의를 위임

  10. AccessDecisionVoter 심의 결과AccessDecisionManager 에게 반환함.

  11. AccessDecisionManager AccessDecisionVoter 에게 받은 심의 결과를 판단

  12. 승인 불가라면 AccessDeniedException( ExcepetionTranslationFilter > AccessDeniedHandler( 익명사용자거나 RememberMe 기능사용 중 일 경우 AuthenticationEntryPoint

  13. 승인 허가라면 자원 접근을 허용한다.