[ODOP] 74 일차 - RememberMe 프로세스

[ODOP] 74 일차 - RememberMe 프로세스
💡
최신 버전에서는 아래의 방식과는 조금 다르게 권한설정을 진행한다.
아래의 설명들은 모두 구버전(2.6.7)을 기준으로 설명하고 있다
  • 로그인 된 사용자는 SecurityContext 에 저장된다
  • SecurityContext 에 존재하지 않는 정상적인 이유는 다음과 같다
  • 사용자의 세션이 만료됨
  • 세션이 끊긴 경우

SecurityContext 에 사용자의 정보가 존재하지 않는 경우 아래의 Filter 가 동작한다

만일 유저의 정보가 SecurityContext 안에 존재한다면 해당 Filter 가 동작하지 않는다

RememberMeAuthenticationFilter

💡
상황 가정
* 사용자가 로그인 할 때 rememberMe 기능을 활성화 시켰다
* 사용자의 세션이 만료되었다

RememberMeAuthenticatilnFilter

사용자가 rememberMe 기능을 요청한다 (사용자가 rememberMe 기능을 활성화 시킨 경우)

RememberMeService

해당 서비스의 구현체는 총 2개

TokenBasedRememberMeService

서버가 메모리에 저장하고 있는 토큰의 내용과 사용자가 보내온 rememberMe 토큰의 내용을 비교하여 인증 처리를 시도한다

PersistentTokenBasedRememberMeService

DB 에 저장하고 있는 토큰의 내용과 사용자가 보내온 rememberMe 토큰의 내용을 비교하여 인증 처리를 시도한다

RememberMeService 의 동작

위 구현체 중 개발자가 정의한 내용에 따라 아래의 프로세스대로 진행된다

만약 조건을 만족하지 못한다면 Exception 이 발생하게 된다.

  1. Token Cookie 추출
    토큰을 추출합니다
  2. Token 이 존재하는가
    rememberMe 라는 이름을 가진 토큰이 존재하는지 확인
  3. Decode Token
    토큰이 조작되거나 정상적인지 확인
  4. Token 이 서로 일치하는가?
    토큰에 저장된 값이 서버에 저장된 값과 같은지 확인
  5. User 계정이 존재하는가?
    Token 안의 user 정보가 DB 에 존재하는지 확인
  6. 새로운 Authentication 생성
    RememberMeAuthenticationToken 생성 및 Authentication 을 생성한다.
    - Authentication 은 AuthenticationManager 에게 보내진다
  7. AuthenticationManager
    6번에서 생성된 Authentication 정보를 이용해 인증을 진행
    인증이 완료되면 권한이 포함된 Authentication 객체가 리턴
  8. SecurityContext 에 Authentication 정보 저장
    7번에서 만들어진 권한이 포함된 Authentication 객체를 SecurityContext 에 추가하여 RememberMe 의 인증 로직을 종료