Spring Security - Remember me, 자동 로그인 API, RememberMeAuthenticationFilter

2021. 4. 15. 14:18SPRING/SPRING SECURITY

사용 예제

1
2
3
4
5
6
7
http
                .rememberMe()
                .rememberMeParameter("remember") // rememberme 파라미터. 기본값은 remember-me
                .tokenValiditySeconds(3600) // 유효기간 설정. 기본값은 14일
                .alwaysRemember(true) // 사용자가 remember me를 체크하지 않아도 true이면 항상 remember me 작동.
                .userDetailsService(userDetailsService) // 사용자 정보를 조회함. 정보를 어디에 저장했느냐에 따라 다양한 구현체 존재.
                ;
cs

RememberMeAuthenticationFilter 흐름

RememberMeAuthenticationFilter가 동작하는 조건

1. 쿠키에 세션정보가 없다. (세션이 만료됐거나 로그아웃 등에 의해 세션 종료된 경우)

2. remember me 쿠키 정보가 있다.

 

동작 순서

  1. 사용자가 Remember me를 체크하고 로그인한다.
  2. 서버는 클라이언트에게 Remeber me 쿠키에 토큰을 세팅하여 응답한다. 토큰은 username, password, 만료기간 등 정보가 암호화되어 인코딩된다.(암호화 알고리즘은 MD5로 확인.)
  3. 사용자 세션이 종료되고 다시 서버에 요청을 한다.
  4. RememberMeServices에서 일단 Remember me 쿠키의 토큰정보를 추출한다.
  5. 토큰을 디코딩하고 서버에 저장되었던 토큰과 일치하는지, 사용자 정보가 있는지 확인한다.
  6. 데이터가 정상이면 새로운 인증객체를 생성하고 클라이언트에게 다시 세션정보를 쿠키에 담아준다.