[Spring Security] RememberMe Filter 개념 & 사용법

SeongWon Oh·2022년 1월 2일
1

Spring Framework

목록 보기
30/33
post-thumbnail

Remember Me기능이란?

Remember Me 기능은 사용자 세션이 만료되고 웹 브라우저가 종료된 후에도 애플리케이션이 사용자의 정보를 기억하는 기능입니다.
사용자가 로그인을 할 때 Remember me기능을 활성화 시킬 경우 서버에서는 Remember Me 쿠키를 생성하게 된다. 그 후 로그인을 할 때는 애플리케이션에 저장되어 있는 Remember Me쿠키를 갖고 http header에 쿠키를 담아서 request를 보내게 되며 server는 http header를 확인한 후 토큰 기반의 인증을 통해 유효성 검사를 하고 로그인 승인을 해줍니다.

  • 인증 성공(Remember-Me쿠키 설정)
  • 인증 실패(쿠키가 존재하면 쿠키 무효화)
  • 로그아웃(쿠키가 존재하면 쿠키 무효화)

동작원리

  1. RememberMeAuthenticationFilter는 세션에 SecurityContext가 Null일 때(인증 객체가 없는 경우), 또는 사용자의 Request http header에 remember me쿠키가 있는 경우 동작을 하게 된다.
  2. RemembeMeService는 인터페이스로 TokenBasedRememberMeServicesPersistentTokenBasedRememberMeServices 구현체가 있습니다. 이 두 구현체가 실제로 remember me인증 처리를 하는 구현체이다.
    2-1. TokenBasedRememberMeServices메모리에 있는 토큰과 사용자가 request header에 담아서 보낸 토큰을 비교하여 인증을 한다. (기본적으로 14일만 토큰을 유지한다.)
    2-2. PersistentTokenBasedRememberMeServicesDB에 저장된 토큰과 사용자가 request header에 담아서 보낸 토큰을 비교하여 인증을 한다. (영구적인 방법)
  3. request에서 토큰을 추출한다.
  4. Token이 존재하는지 확인 후 토큰이 없다면 다음 filter로 넘어간다.
  5. 토큰이 옳바른 형태이며 해당 토큰 값과 서버의 값의 일치하며 사용자의 정보가 일치하는지 확인 후 Authentication을 생성하고 AuthenticationManager를 통해 인증처리를 하게 됩니다.

※ 3~5는 RememberMeServices의 내부에서 일어나는 과정입니다.

Remember Me기능 사용하기

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입니다.

Reference

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글