RememberMeAuthenticationFilter가 사용자 요청을 받아서 그 요청을 실행하는 조건이 있다.
- Authentication 인증 객체가 null일 경우
- 사용자 세션이 만료(session timeout)되거나 끊겨서(브라우저 종료) 더 이상 세션 안에서 SecurityContext를 찾지 못하고, SecurityContext가 존재하지 않기 때문에 Authentication 객체도 없는 경우
- 사용자가 Remember-Me 쿠키를 가지고 요청을 할 경우
동작 방식
- 사용자가 RememberMe 기능을 활성화시키고 요청을 하면 RememberMeAuthenticationFilter가 동작한다.
- RememberMeService 인터페이스의 구현체로 인증 처리한다.
- TokenBasedRemeberMeServices는 메모리에 남겨놓은 토큰과 사용자가 가져온 토큰을 비교해서 인증처리(기본 14일)
- PersistentTokenBasedRememberMeServices는 DB에 남겨놓은 토큰과 사용자가 가져온 토큰을 비교해서 인증처리(영구적인 방법)
- RememberMeServices가 token cookie를 추출해서 사용자가 remember-me라는 토큰이 존재하는지 확인한다.
- 존재하지 않으면 다음 필터로 넘긴다.
- remember-token이 존재하면 Decode token을 통해서 token의 정상 유무를 판단.
- 정상이 아닐경우 예외 발생
- 사용자 토큰과 서버에 저장된 토큰이 일치하는지 확인한다.
- 일치하지 않을 경우 예외 발생
- 토큰이 일치할 경우 토큰에 포함된 유저정보를 통해서 서버의 DB에 저장된 유저정보를 조회
- 유저정보가 존재하지 않으면 예외 발생
- 유저 정보 조회가 성공한다면 새로운 Authentication 인증 객체를 생성한다.
- Authentication 객체를 AuthenticationManager에게 전달해서 인증처리를 한다.
'개발 관련 지식 > Spring Framework Basic' 카테고리의 다른 글
Security - Authentication(인증) 개념 (0) | 2022.04.03 |
---|---|
Security 인가 API 표현식 (0) | 2022.03.31 |
Security - LogoutFilter (0) | 2022.03.29 |
Security - Login Form 인증 (0) | 2022.03.29 |
요청 메시지 - HttpEntity, @RequestBody (0) | 2022.02.19 |