정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
RememberMeAuthenticationFilter
- SecurityContextHolder에 Authentication이 포함되지 않은 경우 실행되는 필터
- 포함되어 있다면 인증된 상태이므로 인증 처리 필요가 없음
- 세션이 만료되었거나 애플리케이션 종료로 인해 인증 상태가 소멸된 경우 → 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 자동 로그인 처리를 수행
- 토큰을 생성하고 쿠키에 담아 보내는 역할이 아님 ! → 이건 폼인증 필터에서 RememberMeServices를 통해 처리
- 인증 상태가 소멸된 경우 재인증 진행하여 자동로그인을 처리하는 역할
흐름도
client
↓ Get /user
↓
RememberMeAuthenticationFilter
↓
Authentication != null : 인증된 Authentcation이 존재하는지
↓
Yes
↓
chain.doFilter
이미 인증된 상태이므로 인증 처리 없이 진행
No
↓
RememberMeServices.authLogin()
- RememberMeAuthenticationToken : (UserDetails + Authorities)
(UsernamePasswordAuthenticationToken와 유사 : 각각의 필터에서 사용하는 토큰은 각각 다름)
인증이 필요한 상태
RememberMeServices.autologin() 호출
autologin() 내부에서 유저 객체와 권한 정보 포함하는 RememberMeAuthenticationToken 생성
↓
AuthenticationManager : RememberMeAuthenticationToken을 전달하여 token을 통해 인증 처리를 하도록 함
↓
인증 성공 ?
↓
Yes
↓
RememberMeAuthenticationToken : 인증에 성공한 인증 객체
↓
SecurityContextHolder : Authentication을 SecurityContext에 설정
↓
SecurityContextRepository : 세션에 SecurityContext가 저장됨
- 세션에 저장되어야 자동 로그인 가능
↓
ApplicationEventPublisher : 인증 성공 이벤트를 게시
No
↓
RememberMeServices : RememberMeServices.loginFail 호출됨
- 인증 요청에 실패하면 보안을 위해 자동 로그인 삭제 : remember-me 쿠키를 지움 !
'spring security' 카테고리의 다른 글
| 로그 아웃 - logout() (0) | 2025.01.31 |
|---|---|
| 익명 인증 사용자 - anonymous() (0) | 2025.01.28 |
| 기억하기 인증 - rememberMe() (0) | 2025.01.28 |
| 기본 인증 필터 - BasicAuthenticationFilter (0) | 2025.01.27 |
| 기본 인증 - httpBasic() (0) | 2025.01.27 |