[Spring Security] 아키텍처 이해 - 인가 결정 심의자 ( AccessDecisionManager, AccessDecisionVoter )

식빵·2022년 9월 8일
0
post-custom-banner

이 시리즈에 나오는 모든 내용은 인프런 인터넷 강의 - 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 에서 기반된 것입니다. 그리고 여기서 인용되는 PPT 이미지 또한 모두 해당 강의에서 가져왔음을 알립니다.



1. AccessDecisionManager

FilterSecurityIntercptor 필터에서 인가처리를 AccessDecisionManager 에게 위임한다.
이때 FilterSecurityIntercptor 에서는 인증정보, 요청정보, 권한정보 를 전달하고,

AccessDecisionManager 는 이 정보를 다시 자신이 갖고 있는 Voter 들에게 넘겨서
각 Voter 의 자원 접근 찬/반 여부를 묻게 된다.

Voter 들은 접근허용, 거부, 보류 등의 리턴값 준다.



2. 접근 결정의 세가지 유형

  • AffirmativeBase: Voter 중에서 하나라도 접근허용이 리턴되면 PASS
  • ConsensusBased: 다수결이며, 동수일 때는 allowIfEqualGrantedDeniedDecision 의 true/false 에 따라 나뉜다.
  • UnanimousBased: 만장일치




3. AccessDecisionVoter

  • 실질적인 자원 접근 허용 심사원이다.
  • Voter 가 접근허용 심사에서 사용하는 것들
    • Authentication : 인증정보
    • FilterInvocation : 요청 정보, ex) antMatcher("/user")
    • ConfigAttributes : 권한정보, ex) hasRole("USER")
  • 리턴 타입
    • ACCESS_GRANTED : 접근허용 (1)
    • ACCESS_DENIED : 접근거부 (-1)
    • ACCESS_ABSTAIN : 접근 보류 (0)




4. 처리 흐름

profile
백엔드를 계속 배우고 있는 개발자입니다 😊
post-custom-banner

0개의 댓글