관리 메뉴

seok의 패치노트

[Security] RememberMeAuthenticationFilter 본문

Spring/Security

[Security] RememberMeAuthenticationFilter

석석's 2021. 11. 5. 00:00


*RememberMeAuthenticationFilter 가 동작하기 위해서는 두가지 조건 이 있다.
   1. Authentication 인증객체가 null일때 다시금 인증을 유지하기 위해 동작한다.
     (인증객체가 null이라는거 뜻은 사용자의 세션이 만료되거나 세션이 끊겨서 세션안에 있는 SecurityContext 

       안에서 Authentication 인증 객체를 더이상 찾지 못할때를 말한다.)
   2. 사용자가 request header에 remember me 쿠키를 가지고 오는경우 

 RememberMeAuthenticationFilter 동작방식 
     *전제조건 사용자의 세션은 만료되었고 , remember me 쿠키를 가지고 있는 상태이다.

 


 1. 사용자 요청이 들어옴
 2. RememberMeService 인터페이스를 구현한 구현체인  "TokenBasedRememberMeService" 와

   "PersistentTokenBasedRememberMeService"  두 클래스가 실질적으로 Remember Me 인증을 처리한다.
    * TokenBasedRememberMeService
        - 메모리에 저장된 토큰과 사용자가 들고온 rememberMe 쿠키를 비교하여 인증처리를 진행함
    * PersistentTokenBasedRememberMeService
        - DB에 토큰을 저장해두고 클라이언트가 가지고 온 토큰을 가지고 인증처리를 진행함   

 3. 사용자로 부터 넘어온 쿠키를 추출함 
 4. 사용자가 가져온 쿠키가 remember me 인지 검사함    
      - 존재하면 토큰의 형식이 정상적인 규칙을 지키고 있는 토큰인지 판단함(정상유무 판단.) - Decode Token
      - 존재하지 않으면 다음 필터로 이동함     

 5. 정상적인 토큰일경우 진행하고 아닐경우 익셉션 예외를 터트린다.    
 6. 디코드 한 토큰을 가지고 서버에 있는 토큰과 비교하여 일치하면 진행하고 아니면 예외를 터트린다.
 7. 토큰값에서 포함된 user계정을 가지고 DB에 있는 계정인지 판단하여 있으면 진행하고 아니면 예외를 터트린다.
 8. 새로운 Authentication 인증객체를 생성하여 AuthenticationManager에게 인증객체를 전달하여 인증처리를 한다.