Spring Security - 정수원 6일차

머어조·2022년 4월 6일
0

Spring Security

목록 보기
6/8
post-custom-banner

7. 인증 관리자 : AuthenticationManager

  • 인증 처리하는 filter로부터 인증처리 지시를 받는 첫번째 클래스, ID와 PASSWORD를 Authentication 인증 객체에 저장하고 이 객체를 AuthenticationManager에게 전달
  • AuthenticationManager 인터페이스를 구현한게 ProviderManager이다. AuthenticationProvider를 관리하는 얘임
  • AuthenticationProvider 목록중에서 인증처리 요건에 맞는 AuthenticationProvider를 찾아 인증처리를 위임한다.
  • AuthenticationManager는 단지 인증처리를 하지않고 해당에 맞는 Provider를 찾아 위임하는 역할
  1. Form인증 요청
  2. ProviderManager가 Form 요청에 맞는 DaoAuthenticationProvider 선택 그리고 인증 처리 맡김
  3. Oauth인증요청이 들어오면 ProviderManager는 Oauth를 처리 못하니 부모한테 맡긴다.
  • ProviderManager는 결국 ID 와 PASSWORD를 가지고 인증객체를 만들어 위임한다

응용

  • Linked 형태로 부모와 자식간의 관계를 형성할 수 있다.
  • 자식에서 적절한 AuthenticationProvider를 찾지 못할 경우 계속 부모로 탐색하여 찾는 과정을 반복함
  • AuthenticationManagerBuilder를 사용해서 스프링 시큐리티의 초기화 과정에서 설정한 기본 Parent 관계를 변경해야 권한 필터에서 재 인증 시 모든 AuthenticationProvider를 탐색 할 수 있다.

8. 인증 처리자 - AuthenticationProvider

  • 인증 처리할때 가장 핵심적인 역할을 한다.
  • id와 password를 검증하는 실질적인 클래스
  • manager가 적절한 provider를 선택한다
  • AuthenticationProvider는 인터페이스임. 이걸 적절히 implements 받아서 커스텀하게 사용가능
  • authenticate 메소드에서 실제적인 인증처리를 한다
  • support 메소드는 인증 처리 기준을 정한다
  • ID검증은 UserDetailService에서 데이터 계층으로 부터 사용자 계정이 있는지 없는지 조회하고 유저 객체를 생성해서 UserDetails 객체만들어서 반환
  • password검증은 로그인시 받았던 비번과 UserDetails에 있는 비번 비교
  • 추가 검증 까지 완료하면 Authentication(user, authorities)(유저 정보, 권한 정보)에 담아 Manager에게 보냄

9. 인가 개념 및 필터 이해 : Authorization, FilterSecurityInterceptor

  • 어떤 사용자가 인증을 받고 어떤 자원을 사용하려 할때 자격 조건이 되는지 판단
  • 당신에게 무엇이 허가 되었는지 증명하는 것
  • 첫번째로 시큐리티가 인증 처리를하고 그 다음에 인가 처리한다.

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

  • 웹 계층
    • URL 요청에 따른 메뉴 혹은 화면단위의 레벨 보안
    • /user —> ROLE_USER
  • 서비스 계층
    • 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안
  • 도메인 계층
    • 객체 단위의 레벨 보안
    • 어떤 객체를 사용할때 권한이 되는지 아닌지??

FilterSecurityInterceptor

  • 마지막에 위치한 필터로써 인증된 사용자에 대하여 특정 요청의 승인/거부 여부를 최종적으로 결정
  • 인증객체 없이 보호자원에 접근을 시도할 경우 AuthenticationException을 발생
  • 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException을 발생
  • 권한 제어 방식 중 HTTP자원의 보안을 처리하는 필터
  • 권한 처리를 AccessDecisionManager에게 맡김
  1. 요청이 들오면
  2. FilterSecurityInterceptor가 마지막에 받고 인증여부체크를 한다
  3. 이떄 인증 객체가 있는지 여부 확인
  4. 없으면 AuthenticationException 에러발생
  5. 그 다음 SecurityMetadataSource 가 사용자가 요청한 URL에 대한 권한 정보를 가져온다. 이때 NULL이면 그 URL은 권한이 없으므로 누구나 접근 허용
  6. NULL이 아니면 AccessDecisionManager에게 넘기고 권한 심사함, 최정 심의 결정자임, 내부적으로 AccessDecisionVoter가 심의자임 접근 자격 요건 판단
  7. 접근 거부 뜨면 AccessDeniedException 예외 발생
profile
너어무 조오아
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 11월 20일

잘읽엇씁미다미다미당

답글 달기