RememberMeAuthenticationFilter 의 동작조건.
RememberMeAuthenticationFilter는 특정조건을 수립해야만 동작하는 필터이다.
-
SecurityContext의 Authentication 객체가 null일경우 = 이는 Session만료나 브라우저의 종료를 의미한다.
결국, Remember-Me 쿠키가 존재하든 하지않든 RememberMeAuthenticationFilter는 동작하게 된다.
-
Login(인증) 시기에 사용자가 RememberMe 서비스를 체크하고 인증에 완료했을 경우
이경우에는 첫번째 조건을 포함한다. 이유는 Session이 만료되어 SecurityContext 의 Authentication 객체가 null 이 되는 것이 선행 조건이기 때문이다. 요청시 RequestHeader 에 Remember-Me 라는 Cookies를 들고 갔을 경우를 뜻 한다.
그렇다면 RememberMeAuthenticationFilter의 존재이유는 Session만료와 끊김 같은 상황에서도 인증상태를 유지시켜나가기 위함이다.
RememberMeAuthenticationFilter 의 동작과정.
-
Session 정보가 만료 되었다 + (Remember-Me 쿠키가 RequestHeader에 존재한다) 의 가정조건을 잡고
-
RememberMeAuthenticationFilter가 동작하여 , RememberMeServices의 구현체를 동작시킨다.
RememberMeServices 의 구현체 들이 실질적으로 RememberMe 인증과정을 처리하는 것이다.
-
TokenBasedRememberMeServices : 메모리에 있는 Token 정보를 토대로 Remember-Me 쿠키 값에서 도출된 Token과 비교한다. 메모리에 남는 Token의 기한은 기본적으로 14일이다.
-
PersistentTokenBasedRememberMeServices : DB에 저장된 유저토큰 정보를 토대로 Remember-Me 쿠키 값에서 도출된 Token과 비교한다.
3. RememberMeServices 가 사용자의 Cookie Token을 추출하여 Remember-Me 쿠키가 존재하는지 확인한다.
-
없다면 다음필터로 chain.doFilter()
4. Remember-Me 쿠키가 존재한다면 Cookie Token이 정상적인 규칙을 따르는지를 검사한다.
-
일치하지 않는다면 Exception 발생
5. Cookie Token 의 값과 서버의 Token 값이 일치하는지 확인
-
일치하지 않는다면 Exception 발생
6. 서버 DB 에 저장된 유저정보를 조회, Cookie Token 값의 User 정보를 토대로 해당 계정이 존재하는지 확인
-
존재하지 않는다면 Exception 발생
7. User 계정까지 존재한다면 Authentication타입인 RememberMeAuthenticationToken 객체를 생성하여 AuthenticationProvider 에게 리턴한다.
쿠키를 만드는 과정 : 인증 완료 시, RememberMe 서비스에 체크를 했다면 RememberMeServices의 .loginSuccess() 메서드를 구동시켜 Remember-Me 쿠키를 생성한다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
9.세션 동시 제어 / 세션 고정 보호 / 세션 정책 (0) | 2020.09.21 |
---|---|
8.AnonymousAuthenticationFilter (0) | 2020.09.21 |
6.Remember Me 인증 (0) | 2020.09.19 |
5.LogoutFilter (0) | 2020.09.19 |
4.UsernamePasswordAuthenticationFilter (0) | 2020.09.19 |