Remember Me 기능은 사용자 세션이 만료되고 웹 브라우저가 종료된 후에도 애플리케이션이 사용자의 정보를 기억하는 기능입니다.
사용자가 로그인을 할 때 Remember me기능을 활성화 시킬 경우 서버에서는 Remember Me 쿠키를 생성하게 된다. 그 후 로그인을 할 때는 애플리케이션에 저장되어 있는 Remember Me쿠키를 갖고 http header에 쿠키를 담아서 request를 보내게 되며 server는 http header를 확인한 후 토큰 기반의 인증을 통해 유효성 검사를 하고 로그인 승인을 해줍니다.
RememberMeAuthenticationFilter
는 세션에 SecurityContext가 Null일 때(인증 객체가 없는 경우), 또는 사용자의 Request http header에 remember me쿠키가 있는 경우 동작을 하게 된다.RemembeMeService
는 인터페이스로 TokenBasedRememberMeServices
와 PersistentTokenBasedRememberMeServices
구현체가 있습니다. 이 두 구현체가 실제로 remember me인증 처리를 하는 구현체이다.TokenBasedRememberMeServices
는 메모리에 있는 토큰과 사용자가 request header에 담아서 보낸 토큰을 비교하여 인증을 한다. (기본적으로 14일만 토큰을 유지한다.)PersistentTokenBasedRememberMeServices
는 DB에 저장된 토큰과 사용자가 request header에 담아서 보낸 토큰을 비교하여 인증을 한다. (영구적인 방법)AuthenticationManager
를 통해 인증처리를 하게 됩니다.※ 3~5는
RememberMeServices
의 내부에서 일어나는 과정입니다.
http.rememberMe()
를 confige에 넣어주게 되면 해당 기능이 활성화됩니다.
아래의 사진은 remember me기능이 활성화된 spring security의 기본 폼의 이미지입니다.
remember me의 설정 api들은 다음과 같습니다.
protected void configure(HttpSecurity http) throws Exception {
http.rememberMe()
.rememberMeParameter(“remember”)
.tokenValiditySeconds(3600)
.alwaysRemember(true)
.userDetailsService(userDetailsService)
}
rememberMeParameter(“remember”)
: remember me의 파라미터 명을 설정하는 api입니다. default 값은 remember-me입니다.tokenValiditySeconds(3600)
: remember me쿠키의 만료 시간을 설정하는 api로 default값은 14일 입니다.alwaysRemember(true)
: remember me 기능이 활성화되지 않아도 항상 실행하도록 설정하는 기능입니다. (일반적으로는 false)userDetailsService(userDetailsService)
: remember me기능을 수행할 때 시스템의 사용자 계정을 조회할 때 처리를 설정하는 api입니다.