AuthenticationManager, AuthenticationProvider

AuthenticationManager

 

 

  • 인증을 요청하는 방식에 따라 그에 맞는 Provider에게 인증을 위임하는 클래스이다.
  • Form 인증 요청시 
    • ProviderManager가 provider중 인증처리를 할 수 있는지 확인
    • Form 인증을 담당하는 DaoAuthenticationProvider에게 인증을 위임. 
    • 인증이 되면 UsernamePasswordAuthenticationToken을 반환 받고 다시 UsernamePasswordAuthenticationFilter에게 넘김. 
  • RememberMe 인증요청시 
    • ProviderManager가 provider중 인증처리를 할 수 있는지 확인
    • RememberMe 인증을 담당하는 RememberMeAuthenticationProvider에게 인증을 위임. 
    • 인증이 되면 UsernamePasswordAuthenticationToken을 반환 받고 다시 UsernamePasswordAuthenticationFilter에게 넘김.
  • OAuth 인증 요청시
    • ProviderManager가 provider중 인증처리를 할 수 있는지 확인
    • 자신이 가지고 있는 Provider중 해당 인증을 처리 할 수 없다면 부모가 가지고 있는 Provider를 검색함. 
    • OAuth 인증을 담당하는 OAuthAuthenticationProvider에게 인증을 위임. 
    • UsernamePasswordAuthenticationFilter 인증이 된 객체를 넘김. 

AuthenticationProvider

 

  • 실질적인 검증을 수행하는 인터페이스이다. 
  • provider에는 두 가지 메소드로 구분이 되어져 있음. 
    • Supports : 해당 인증방식을 처리 할 수 있는지 Boolean값으로 return함.
    • authenticate : 입력된 객체에 대한 인증을 시작함. 
  • authenticate 메소드를 수행하게 되면 먼저 ID 검증을 시작함.
  • ProviderManager로 부터 받은 Authentication 객체에서 username만 꺼내서 DB에 있는지 확인함. 
    • 해당 부분에서 DB에 있는 것이 확인이 되지 않았다면 UserNotFoundException을 발생함. 
    • DB에 있다면 해당 유저의 정보를 UserDetails라는 객체에 담아서 반환함. 
  • UserDetails와 Authentication 내에 있는 Password를 꺼내와서 검증을 함. 
    • 해당 부분에서 검증이 실패하면 BadCredentialException을 발생함. 
  • 이 후 추가검증을 수행을 함.
    • 인증이 된 경로로 들어와서 인증을 받고 있는지 확인을 함. 
  • 인증이 완료가 되면 AuthenticationProvider가 UsernamePasswordAuthenticationToken을 반환함. 

'Backend > Security' 카테고리의 다른 글

AccessDecisionManager, AccessDecisionVoter  (0) 2023.01.22
Authorization (인가), FilterSecurityInterceptor  (0) 2023.01.22
SecurityContextPersistenceFilter  (0) 2023.01.21
SecurityContextHolder, SecurityContext  (1) 2023.01.21
Authentication  (0) 2023.01.18