Spring Security - UserDetailsService with Remember-me feature (PersistentTokenBasedRememberMeServices)

바로 지난 글( https://infondgndg91.blogspot.com/2020/06/spring-security-userdetailsservice-with.html )에서, 스프링 시큐리티에서 TokenBasedRememberMeServices 를 이용한 토큰 기반 Remember-Me 기능에 대해 알아보았다. 이번글에서는, PersistentTokenBasedRememberMeServices 를 이용한 영구 토큰 기반 Remember-Me 에 대해서 정리해보려고 한다. 먼저 영구 토큰 기반 Remember-Me 기능을 사용하기 위해선 말 그대로 토큰을 저장할 저장소가 필요하다. 나의 경우 MariaDB 를 사용했다. Persistent Token Based 는 Token Based 와 다르게 시그니처를 검증하지 않는다. 대신, 토큰 저장소에 일한 토큰이 존재하는지 확인한다. Persistent Token Based Cookie 는 아래와 같은 요소를 포함한다. 시리즈 식별자 (Series Identifier) : 사용자의 초기 로그인을 식별하며, 사용자가 세션에 자동으로 로그인될 때마다 값이 항상 동일하다 . 토큰 값 : 사용자가 Remember-Me 기능을 사용해 인증될 때마다 변경되는 고유한 값이다. 아래 다이어그램을 보면, Remember-Me 쿠키가 전송되면, 스프링 시큐리티는 전송된 쿠키의 시리즈 식별자를 통해서, PersistentTokenRepository 에서 예상되는 토큰값을 찾는다. 찾은 토큰의 값과 전송된 쿠키의 값을 비교하여 일치여부를 통해 인증을 한다. 사용자가 전송한 시리즈 식별자와 일치하는 값이 데이터베이스에 존재하지만 토큰 값이 일치하지 않는 경우 누군가가 Remember-Me 쿠키를 도용하고 있다고 간주할 수 있다. 해당 경우, 스프링 시큐리티는 관련된 Remember-Me 토큰을 폐기하고 사용자에게 해당 세션의 탈취 가능성을 경고한다. 이 경우 스프링 시큐리티는 관련된 모든 세션을...