springframework/시작하자SpringSecurity

7.RememberMeAuthenticationFilter

Jungsoomin :) 2020. 9. 19. 23:30

RememberMeAuthenticationFilter 의 동작조건. 

RememberMeAuthenticationFilter특정조건을 수립해야만 동작하는 필터이다.

  • SecurityContextAuthentication 객체가 null일경우 = 이는 Session만료나 브라우저의 종료를 의미한다.

결국, Remember-Me 쿠키가 존재하든 하지않든 RememberMeAuthenticationFilter는 동작하게 된다.

 

  • Login(인증) 시기에 사용자가 RememberMe 서비스를 체크하고 인증에 했을 경우

이경우에는 첫번째 조건을 포함한다. 이유는 Session이 만료되어 SecurityContext Authentication 객체가 null 이 되는 것이 선행 조건이기 때문이다.  요청시 RequestHeader 에 Remember-Me 라는 Cookies를 들고 갔을 경우를 뜻 한다.

 

그렇다면 RememberMeAuthenticationFilter존재이유Session만료와 끊김 같은 상황에서도 인증상태를 유지시켜나가기 위함이다.


RememberMeAuthenticationFilter 의 동작과정.

  1. Session 정보가 만료 되었다 + (Remember-Me 쿠키가 RequestHeader에 존재한다) 의 가정조건을 잡고

  2. 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 쿠키를 생성한다.