이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
인증 API - RememberMeAuthentiationFilter
- 인증을 처리한 사용자는 모두 SecurityContext 내부에 Autehntication 객체를 가진다.
- SecurityContext 내부에 Authentication 객체를 가지고 있지 않은 경우 (= Authentication 객체가 null인 경우) RememberMeAuthenticationFilter가 동작한다.
- 세션이 만료됨
- 세션이 끊어져 더이상 세션 안에서 SecurityContext 내부 Authentication 객체를 찾지 못하는 경우
- 이 두 경우 RememberMeAutenticationFilter가 동작해 인증을 시도한다.
- 사용자가 remember-me 쿠키를 가지고 있어야 한다.
- RememberMeAuthenticationFilter 동작 조건
- Authentication 객체가 존재하지 않는 경우
- 사용자가 remember-me 쿠키를 가지고 있는 경우
- RememberMeServices는 인터페이스다.
- RememberMeServices 구현체
- TokenBasedRememberMeServices
- 메모리 토큰과 사용자 토큰을 비교해 인증 처리를 수행한다.
- 기본 값은 14일
- PersistentTokenBasedRememberMeServices
- DB에 발급한 토큰과 사용자 토큰을 비교해 인증 처리를 수행한다.
- TokenBasedRememberMeServices
- RememberMeServices는 Token Cookie를 추출한다.
- RememberMeServices 구현체
- 사용자 토큰이 remember-me 토큰이 맞는지 검사한다.
- 존재하지 않으면 다음 필터로 이동하게 된다. (chain.doFilter)
- 토큰의 포맷(=형식)이 정해진 규칙을 가지고 있는지 판단한다.
- 정상이 아닌 경우 예외를 발생시킨다.
- 사용자 토큰 값과 서버에 저장된 토큰 값을 비교한다.
- 일치하지 않으면 예외를 발생시킨다.
- 토큰에 포함된 User 정보가 DB에 존재하는지 확인한다.
- 존재하지 않으면 예외를 발생시킨다.
- 새로운 Authentication 객체를 생성한다.
- 생성한 인증(Authentication) 객체를 AuthenticationManager에게 전달해 인증을 처리한다.
'스프링 시큐리티 > 스프링 시큐리티 기본 API 및 Filter 이해' 카테고리의 다른 글
동시 세션 제어, 세션 고정 보호, 세션 정책 (0) | 2023.01.11 |
---|---|
익명 사용자 인증 필터: AnonymousAuthenticationFilter (0) | 2023.01.11 |
Remember Me 인증 (0) | 2023.01.10 |
Logout 처리, LogoutFilter (1) | 2023.01.10 |
FormLogin 인증 필터: UsernamePasswordAuthenticationFilter (0) | 2023.01.09 |