[ODOP] 74 일차 - RememberMe 프로세스
![[ODOP] 74 일차 - RememberMe 프로세스](/content/images/size/w1200/2023/08/-----2023-08-01----10.29.26-9.png)
💡
최신 버전에서는 아래의 방식과는 조금 다르게 권한설정을 진행한다.
아래의 설명들은 모두 구버전(2.6.7)을 기준으로 설명하고 있다
아래의 설명들은 모두 구버전(2.6.7)을 기준으로 설명하고 있다
- 로그인 된 사용자는 SecurityContext 에 저장된다
- SecurityContext 에 존재하지 않는 정상적인 이유는 다음과 같다
- 사용자의 세션이 만료됨
- 세션이 끊긴 경우
SecurityContext 에 사용자의 정보가 존재하지 않는 경우 아래의 Filter 가 동작한다
만일 유저의 정보가 SecurityContext 안에 존재한다면 해당 Filter 가 동작하지 않는다
RememberMeAuthenticationFilter
![](https://blog.pollra.com/content/images/2023/08/-----2023-08-10----9.47.48.png)
💡
상황 가정
* 사용자가 로그인 할 때 rememberMe 기능을 활성화 시켰다
* 사용자의 세션이 만료되었다
* 사용자가 로그인 할 때 rememberMe 기능을 활성화 시켰다
* 사용자의 세션이 만료되었다
RememberMeAuthenticatilnFilter
사용자가 rememberMe 기능을 요청한다 (사용자가 rememberMe 기능을 활성화 시킨 경우)
RememberMeService
해당 서비스의 구현체는 총 2개
TokenBasedRememberMeService
서버가 메모리에 저장하고 있는 토큰의 내용과 사용자가 보내온 rememberMe 토큰의 내용을 비교하여 인증 처리를 시도한다
PersistentTokenBasedRememberMeService
DB 에 저장하고 있는 토큰의 내용과 사용자가 보내온 rememberMe 토큰의 내용을 비교하여 인증 처리를 시도한다
RememberMeService 의 동작
위 구현체 중 개발자가 정의한 내용에 따라 아래의 프로세스대로 진행된다
만약 조건을 만족하지 못한다면 Exception 이 발생하게 된다.
Token
Cookie 추출
토큰을 추출합니다Token
이 존재하는가
rememberMe 라는 이름을 가진 토큰이 존재하는지 확인- Decode
Token
토큰이 조작되거나 정상적인지 확인 Token
이 서로 일치하는가?
토큰에 저장된 값이 서버에 저장된 값과 같은지 확인User
계정이 존재하는가?
Token 안의 user 정보가 DB 에 존재하는지 확인- 새로운
Authentication
생성
RememberMeAuthenticationToken 생성 및 Authentication 을 생성한다.
- Authentication 은 AuthenticationManager 에게 보내진다 AuthenticationManager
6번에서 생성된 Authentication 정보를 이용해 인증을 진행
인증이 완료되면 권한이 포함된 Authentication 객체가 리턴- SecurityContext 에 Authentication 정보 저장
7번에서 만들어진 권한이 포함된 Authentication 객체를 SecurityContext 에 추가하여 RememberMe 의 인증 로직을 종료