SpringSecurity 학습(22) -- Authorization, FilterSecurityInterceptor

carlkim·2023년 10월 31일

스프링시큐리티학습

목록 보기
22/24

Authorization - 인가처리

인증에 성공한 사용자가 자원에 접근이 가능한지 처리하는 영역

당신에게 무엇이 허가 되었는지 증명하는 것이다.

스프링 시큐리티는 Authentication과 Authorization을 나눈다.

인가 단계

  1. 사용자가 인증을 받는다.

  2. 인증 받은 사용자가 웹 어플리케이션에 접근

  3. 인증 받은 사용자가 가진 권한이 해당 자원에 접근할 권한이 있는지 확인
    (이것이 인가이다)

--- 인증을 먼저 하고 후에 인가를 한다 ---

권한 계층

  1. 웹 계층
    -- URL 요청에 다른 메뉴 혹은 화면 단위의 레벨 보안

  2. 서비스 계층
    -- 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안

  3. 도메인 계층
    -- 객체 단위의 레벨 보안

--- FilterSecurityInterceptor ----

  1. 마지막에 위치한 필터로써 인증된 사용자에 대하여 특정 요청의 승인/거부 여부를 최종적으로 결정

  2. 인증객체 없이 보호자원에 접근으 시도할 경우 AuthenticationException을 발생

  3. 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException을 발생

  4. 권한 제어 방식 중 HTTP 자원의 보안을 처리하는 필터

  5. 권한 처리를 AccessDecisionManager에게 맡김

  1. 사용자가 접근 시도

  2. FilterSecurityInterceptor 필터가 요청을 받아 인증 여부를 체크한다
    2-1 (SecurityContext 내에)사용자가 가진 인증객체가 있는지 확인한다는 것
    2-2 인증 객체가 없으면(null) AuthenticationException 발생시켜 인가 처리하지 않아.
    2-3 AuthenticationException를 ExceptionTranslationFilter가 받아서 현재 사용자가 인증예외를 터졌기 때문에 로그인 화면으로 다시 보낸다.

  3. 인증 객체가 null이 아니라면?
    3-1 SecurityMetadataSource 클래스가 받는다.
    3-2 /user url에 role_user로 접근가능하다 한다면
    3-3 SecurityMetadataSource가 권한 정보를 가지고 오는 역할을 한다
    [사용자가 요청한 자원에 필요한 권한 정보 조회해서 전달한다]

  4. 권한 정보가 없다면(null인경우)? (아무나 접근 가능한 자원) -> 자원 접근 허용

  5. 권한 정보가 있다면?
    5-1 유저 권한 정보를 AccessDecisionManager가 최종으로 권한 심의를 결정한다
    5-2 AccessDecisionVoter 라는 심의자에게 심의 요청하고 AccessDecisionVoter가 승인여부를 AccessDecisionManager에게 전달한다.
    5-3 접근이 거부당하면? AccessDeniedException에러 발생 -> ExceptionTranslationFilter 에게 전달

  6. 접근이 승인된다면 자원 접근이 허용된다.

profile
기본부터 가면 됩니다.

0개의 댓글