Authentication Flow : 인증의 흐름
-
Client Login Request
-
UsernamePasswordAuthenticationFilter 가 수렴하여 username , password 를 담은 Authentication 토큰생성
-
AuthenticationManager 에게 Authentication 객체를 넘겨 처리 위임
-
AuthenticationManager는 인증 관리자로 적절한 AuthenticationProvider에게 넘기는 역할 만을 함
-
AuthenticationProvider 는 Authentication 객체를 받아 실제 인증 처리를 시작
-
AuthenticationProvider는 UserDetailsService에게 username 을 주어 User객체 요청 : loadUserByUsername(username)
-
UserDetailsService가 유저정보를 DB에서 조회 : findById()
-
존재하지 않는다면 UserNameNotFoundException 발생, UsernamePasswordAuthenticationFilter가 이를 받아 AuthenticationFailureHanlder 실행
-
유저정보가 DB에서 존재 시 UserDetails 타입의 User 객체 리턴
-
AuthenticationProvider 는 UserDetails 를 받아 UserDetails 의 password 값과 Authentication의 credential 속성 값을 검증
-
일치하지 않으면 BadCredentialException 발생, UsernamePasswordAuthenticationFilter가 이를 받아 AuthenticationFailureHanlder 실행
-
password 까지 인증 되었으면 AuthenticationProvier 는 UsernamePasswordAuthenticationToken 객체를 생성(Authentication 목차에 기술) 하여 AuthenticationManager 에게 리턴
-
AuthenticationManager 는 UsernamePasswordAuthenticationToken 객체를 UsernamePasswordAuthenticationFilter 에게 리턴
-
UsernamePasswordAuthenticationFilter 는 SecurityContext(SecurityContextPersistenceFilter가 생성하는 듯함) 에 UsernamePasswordAuthentionToken을 저장
Form Login 방식에서 AuthenticationMananger 가 선택하는 AuthenticationProvider
** DaoAuthenticationProvider는 FormLogin 인증 방식을 처리하는 구현체이다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
21.AuthenticationProvider (0) | 2020.09.22 |
---|---|
20.AuthenticationMananger를 구현한 ProviderManager (0) | 2020.09.22 |
18.인증 저장소 필터 , SecurityContextPersistenceFilter (0) | 2020.09.22 |
17.SecurityContextHolder, SecurityContext (0) | 2020.09.22 |
16.Authentication (0) | 2020.09.21 |