Spring security

스프링 시큐리티 기본 API 및 Filter 이해 - Remember Me 인증 필터 : RememberMeAuthenticationFilter

sami355 2023. 6. 25. 00:09

인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다.

RememberMeAuthenticationFilter 전체 흐름
인증정보를 생성해주는 UsernamePassworfAuthenticationFilter

RememberMeAuthenticationFilter는 RememberMe 쿠키 관련된 필터로 사용자의 인증정보가 없을때 수행된다. 즉 사용자의 인증정보가 security context에 없을때 수행된다는 말이다. (사용자의 인증정보가 없다는 말은 세션이 만료되어 사용자의 정보를 찾을 수 없는 말이다.)

 

또한 TokenBasedRememberMeService는 인 메모리 방식으로 메모리에 토큰 정보를 저장하고 복원하여 돌려주는 방식이고 PersistentTokenBasedRememberMeServices는 DB에 저장하고 필요시 인증정보를 복원하여 돌려주는 방식이다.

  1. TokenBasedRememberMeServices: 이 방식에서는 사용자의 인증 정보를 바탕으로 하나의 쿠키로 Remember-me 토큰을 생성하는 방식입니다. 쿠키에 저장된 토큰은 사용자 이름, 만료 시간, 암호화 된 패스워드를 통해 서명됩니다. 사용자가 브라우저에 요청을 보낼 때마다 서버에 전송되며, RememberMeAuthenticationFilter에서 사용자의 인증 정보를 복원하여 사용합니다. 이 방식은 간단한 구조로 되어 있지만, 토큰을 도용하거나 변조할 위험이 있습니다. 또한 사용자의 패스워드가 변경되면 쿠키에 저장된 토큰이 무효화됩니다.
  2. PersistentTokenBasedRememberMeServices: 이 방식에서는 데이터베이스 또는 유사한 영구 저장소에 토큰 정보를 저장하는 방식입니다. 이 때 토큰은 각각의 시리즈와 사용자용 값으로 구성되며, 이러한 정보를 사용하여 사용자의 인증 데이터를 복원합니다. 쿠키에는 시리즈와 값만 저장되어송됩니다. 버튼 클릭시 마다 사용자 전용값은 변경되어 저장되며, 이를 통해 토큰 도용을 감지할 수 있습니다. 이 방식은 TokenBasedRememberMeServices 방식보다 더 안하고, 사용자의 패스워드 변경이 토큰에 영향을 미치지 않습니다. 그러나 설정과 구현이 복잡하며, 영구소가 필요합니다.

이후 복원된 토큰을 UsernamePasswordAuthenticationFilter의 Authentication Manager에 돌려준다.