[ODOP] 91일차 - Authorization, FilterSecurityInterceptor

[ODOP] 91일차 - Authorization, FilterSecurityInterceptor
  • 인가 처리에 대한 내용
    • 인가: 사용자가 자원에 접근할 자격이 있는지 확인하는 행위
  • Spring Security 는 인증/인가 영역으로 나누어 보안을 처리한다

스프링 시큐리티가 지원하는 권한 계층

웹 계층

  • URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안

서비스 계층

  • 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안

도메인 계층(Access Control List, 접근 제어 목록)

  • 객체 단위의 레벨 보안

FilterSecurityInterceptor

  • 마지막에 위치한 필터로서 인증된 사용자에 대한 특정 요청의 승인/거부 여부를 최종적으로 결정
  • 인증 객체 없이 보호자원에 접근을 시도 할 경우 AuthenticationException 을 발생
  • 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException 을 발생
  • 권한 제어 방식 중 HTTP 자원의 보안을 처리하는 필터
  • 권한 처리를 AccessDecisionManager에게 맡김
  1. 사용자가 접근을 요청한다
  2. 인증 객체 존재 유무를 판단한다
    1. 존재한다면 인가 로직을 계속해서 수행한다
    2. 조재하지 않는다면 AuthenticationException 을 발생시켜 인증 객체를 생성하도록 유도한다
  3. 권한 정보를 확인한다
    1. 권한 정보가 DB 혹은 메모리에 존재한다면 '권한이 필요한' 자원이므로 접근 확인 로직을 실행한다
    2. 권한 정보가 DB 혹은 메모리에 존재하지 않는다면 '권한이 필요없는' 자원이므로 접근 권한을 허용한다
  4. 해당 권한을 가지고 접근 가능한지 확인한다
    1. 접근할 수 있는 권한을 가지고 있다면 자원 접근을 허용한다
    2. 접근할 수 없는 권한이라면 AccessDeniedException 을 발생시킨다

MethodSecurityInterceptor

  • 메소드에 접근 권한을 확인하는 로직이 포함된 구현체 이다
  • 실제 동작은 AOP를 기반으로 동작한다