[Spring Security] Remember Me / RememberMeAuthenticationFilter

알리아 Alea·2023년 9월 14일

Spring Security

목록 보기
3/4

인프런 정수원님 강의 [스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security]를 토대로 정리한 내용입니다.

1. Remember Me 인증

(1) 세션이 만료되고 웹 브라우저가 종료된 후에도 사용자를 기억하는 기능
(2) Remeber Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 됨
(3) 사용자 라이프 사이클

  • 인증 성공(쿠키설정)
  • 인증 실패(쿠키 존재 시 무효화)
  • 로그아웃(쿠키 존재 시 무효화)
* 우선 원활한 강의 수강을 위해 스프링 버전을 다운그레이드 하였다! 
해당 강의에서는 스프링 시큐리티 5.7.x 이하 버전을 권장하고 있다. 
스프링 버전을 다운그레이드 시켜주면 (시큐리티 버전을 따로 명시해 주지 않는 한)
자동으로 스프링 버전에 맞춰 다운그레이드 된다. 

이렇게 remember-me 관련 코드를 SecurityConfig에 적어주고 서버를 다시 실행하면

Remember me on this computer 체크란이 생성됨!
체크한 후 로그인하면 쿠키에 정보가 잘 저장되어 있는 것을 볼 수 있다.

2. Remember Me 인증 필터: RememberMeAuthenticationFilter

  • RememberMeAuthenticationFilter 필터 동작 과정

** RememberMeAuthenticationFilter 가 작동하는 경우?
(1) 인증객체가 있는 경우
(2) 사용자가 Remember Me 쿠키를 가져오는 경우

  1. 유저의 요청이 들어오면
  2. RememberMeService - 인터페이스 구현체 동작
    (1) TokenBasedRememberMeServices - 메모리에서 저장된 토큰과 사용자의 쿠키 토큰을 비교하여 인증 처리
    (2) PersistentTokenBasedRememberMeService - DB에 저장된 토큰과 사용자의 쿠키 토큰을 비교하여 인증 처리
  3. Token Cookie 추출하여 Token이 존재하는지 확인 -> 없으면 다음 필터로
  4. Decode Token 정상 유무 판단
  5. Token이 서로 일치하는가? -> 일치하지 않으면 Exceiption 발생
  6. User 계정이 존재하는가? -> 일치하지 않으면 Exceiption 발생
  7. 구현체가 새로운 Authentication 생성 후 AuthenticationManager에 전달

0개의 댓글