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 |