스프링 시큐리티에서 인증(Authentication)은 AuthenticationManager가 한다.
Authentication authenticate(Authentication authentication) throws AuthenticationException;
- 파라미터인 Authentication이 유저가 입력한 id, pw 같은 인증정보를 가지고 있다
- AuthenticationManager.authenticate를 통해 인증정보가 유효하다면 Principal를 담고있는 Authentication 객체를 리턴한다
- 계정이 비활성화 되어있다면 - DisabledException
- 계정이 잠겨있다면 - LockedException
- 인증정보가 잘못되었다면 - BadCredentialsException
기본적인 구현체는 AuthenticationProvider를 사용한다
인자로 받은 Authentication
- Principal: twlee (id)
- Credentials: 123 (pw)
유효한 인증인지 확인 (AuthenticationManager.authenticate)
- 사용자가 입력한 password가 UserDetailsService를 통해 읽어온 UserDetails 객체에 들어있는 password와 일치하는지 확인
- 해당 사용자 계정이 잠겨 있진 않은지, 비활성 계정은 아닌지 등 확인
- AuthenticationManager의 구현체들이 처리
- AbstractUserDetailsAuthenticationProvider는 UsernamePasswordAuthenticationToken만 처리
- PreAuthenticatedAuthenticationProvider는 PreAuthenticatedAuthenticationToken만 처리
- 그래서 Provider들은 boolean supports(Class<?> authentication) 라는 메소드를 추가로 가지고 있다. supports를 Override해서 원하는 Authentication 상속 클래스의 인스턴스인지 확인하게끔 만드는 것이다.
Autentication 객체 반환
- Principal: UserDetails 타입의 객체 (UserDetailsService에서 반환한 그 객체)
- Credentials: 123 (인코딩 되어있을 것임)
'스터디-Spring' 카테고리의 다른 글
[스프링 시큐리티] Authentication과 SecurityContextHolder (0) | 2022.01.11 |
---|---|
[스프링 시큐리티] ThreadLocal (0) | 2022.01.10 |
[스프링 시큐리티] SecurityContextHolder와 Authentication (0) | 2022.01.10 |
[스프링 시큐리티] 스프링 시큐리티 테스트 - Form Login (0) | 2022.01.09 |
[스프링 시큐리티] 스프링 시큐리티 테스트 - RequestPostProcessor, Annotations (0) | 2022.01.09 |