Spring Security의 인증 과정
09 May 2018Spring Security의 인증 과정
- 서버에 로그인 인증 요청을 하면 Spring Security에 Chain형태로 구성된 Filter들이 동작한다.
- UsernamePasswordAuthenticationFilter가 인증처리를 진행한다.
- UsernamePasswordAuthenticationFilter는 인증되지 않은 Authentication 객체를 생성한다.
- UsernamePasswordAuthenticationFilter는 생성된 Authentication 객체를 가지고 AuthenticationManager에게 인증을 요청한다.
- AuthenticationManager는 AuthenticationProvider를 통해 인증을 시도한다.
- 아래와 같은 AuthenticationProvider들을 제공한다.
- CasAuthenticationProvider
- JaasAuthenticationProvider
- DaoAuthenticationProvider
- OpenIDAuthenticationProvider
- RememberMeAuthenticationProvider
- LdapAuthenticationProvider
- 아래와 같은 AuthenticationProvider들을 제공한다.
- AuthenticationProvider는 UserDetailsService에게 UserDetails 정보를 요청한다.
- UserDetailsService는 username에 해당하는 UserDetails를 생성한다.
- UserDetailsService는 UserDetails 정보를 반환한다.
- AuthenticationProvider는 UserDetails 정보를 가지고 인증된 Authentication 객체를 반환한다.
- 인증에 실패하면 AuthenticationException이 발생한다.
- AuthenticationManager는 Authentication 객체를 반환한다.
- SecurityContext에 Authentication 객체를 저장한다.
UsernamePasswordAuthenticationToken는 Authentication를 구현한 AbstractAuthenticationToken의 하위클래스 중 하나이며 일반적인 인증 시 Authentication의 구현체로 사용된다.
User는 Spring Security에서 제공하는 UserDetails의 구현 클래스이다.