[Spring] 인가(Authorization)

kihongsi·2024년 3월 18일
0

spring

목록 보기
7/7

인증과 인가

  • 인증(Authentication)
    이름, 이메일 등 식별 가능한 정보를 이용해 유저의 신원을 입증하는 과정(회원가입, 로그인)
  • 인가(Authorization)
    인증된 사용자가 특정 자원에 대해 권한이 있는지 확인하는 과정. 인증이 선행되어야 함

Spring Security에서의 인증과 인가

보안 설정을 담당하는 스프링 하위 프레임워크. 인증, 인가를 Filter Chain에서 처리한다. 이 때, 인증 필터가 인가 필터보다 앞쪽 단에 위치하므로 인증에 성공한 요청만이 인가 프로세스로 진입 가능하다. 클라이언트 요청이 Dispatcher Servlet에 도달하기 이전에 인증 및 인가를 수행함

Dispatcher Servlet?

HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(MVC 구조에서 클라이언트의 모든 요청을 디스패처 서블릿으로 가장 먼저 도달)

인가 아키텍처

업로드중..

FilterSecurityInterceptor에서 인가 처리를 AccessDecisionManager에게 위임한다. (이 때 인증, 요청, 권한 등의 정보를 전달)
그럼 전달받은 정보를 Voter들에게 넘겨 자원 접근에 대한 찬/반 여부를 묻는다.(접근 허용 여부 리턴)

AccessDecisionManager

웹 어플리케이션 또는 REST API에서 권한을 관리(인가)할 때 실제 처리를 담당하는 부분은 AccessDecisionManager이다.
e.g. 인증객체 없이 자원에 접근하거나, 자원에 대한 권한이 없는 경우 접근 제어
여러 개의 Voter를 가진다. 각각의 Voter를 거치며 유효한 지 확인한다. 스프링 시큐리티는 기본적으로 3개의 유형(인터페이스)을 제공한다.

  • AffirmativeBased: 여러 Voter 중 하나라도 허용이면 접근 승인
  • ConsensusBased: 다수결(같을 경우 어떻게 처리할 지 설정 가능)
  • UnanimousBased: 모두 허용이어야 접근 승인

AccessDecisionVoter

각각의 Voter들은 판단을 심사하여 AccessDecisionManager로 값을 리턴한다.

Return Value

  • ACCESS_GRNTED: 접근 허용
  • ACCESS_ABSTAIN: 접근 보류
  • ACCESS_DENIED: 접근 거부

0개의 댓글