스프링 시큐리티 - 인증절차, AuthenticationManager, AuthenticationProvider

SeungTaek·2022년 2월 23일
0
post-thumbnail

본 게시물은 스스로의 공부를 위한 글입니다.
잘못된 내용이 있으면 댓글로 알려주세요!

Authentication Flow




AuthenticationManager

AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider를 찾아 인증처리를 위임한다.

부모 ProviderManager를 설정하여 AuthenticationProvider를 계속 탐색 할 수 있다.

인증 처리를 위임하는 예시는 다음과 같다.

  • Form 인증이 들어온 경우 : DaoAuthenticationProvider에게 위임
  • RememberMe 인증이 들어온 경우 : RememberMeAuthenticationProvider에게 위임
  • Oauth 인증이 들어온 경우 : 본인이 가진 Provider 중에 적합한게 없다면 다른 ProviderManager이 가지고 있는 Provider까지 탐색하게 된다.

어차피 자신이 List<Provider>을 가지고 있는데, 굳이 다른 ProviderManager이 필요한 이유가 있을까?

거창한 이유는 아니다. 대부분 기본 기능 안에서 처리되지만, 혹시 적합한 Provider를 찾지 못했을 경우 부모 객체까지 거슬러 올라가서 처리를 맡겨보자는 의미이다. 사용자가 임의로 ProviderManager를 생성해 등록할 수도 있지만, 굳이 그렇게 할 이유는 없다. 하나의 ProviderManager으로도 처리가 가능하기 때문이다.

provider이 검증이 끝나면 manager에게 인증객체(authentication)을 리턴한다. manager은 이 객체를 다시 필터에게 리턴해준다. 필터는 리턴 받은 인증객체를 SecurityContext에 저장함으로써 전역적으로 사용 가능하게 만든다.



AuthenticationProvider

실질적으로 인증을 진행하는 구현체
supports(authentication)으로 인증을 진행하기 적합한 구현체인지 확인 후 authenticate(authentication)으로 검증을 진행한다. 이때 authentication에는 사용자가 입력한 ID와 password를 담고있다.
모든 검증이 끝난 후 user정보와 권한정보 등이 들어있는 authenticationAuthenticationManager에게 리턴함으로써 끝난다.



Reference

인프런 '스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security' (정수원)

profile
I Think So!

0개의 댓글