[Security] Remember Me
Remember Me
- 세션이 만료되거나 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
- 서버가 사용자 정보를 Response 헤더에 쿠키를 담아 클라이언트에게 전달
- 쿠키를 이용해 토큰기반의 인증을 시도하고 사용자가 가지고 있는 쿠키의 유효성을 검사하고 그 토큰이 검증이
되면 자동로그인 됨
(클라이언트가 서버로 request header에 "remember-me" 라는 이름을 가진 쿠키를 보내면 서버에서 쿠키를 디코드
하고 파싱해서 username , password 를 추출해서 사용자 계정을 얻고 이 계정으로 인증을 시도함 , 그리고나서
인증에 성공하게 되면 클라이언트는 다시 JSESSIONID가 생김)
**크롬 확장프로그램 중에 editThisCookie 라는 프로그램을 이용해서 현재 클라이언트에 담긴 JSESSION 과 쿠키정보를 확인해보자
사용자 라이프 사이클
1. 인증성공 시
- Remember-me 쿠키 설정함
2. 인증실패 시
- 쿠키가 존재하면 쿠키를 무효화 시킴
3. 로그아웃 시
- 쿠키가 존재하면 쿠키를 무효화 시킴
Remember Me API
http.rememberMe() //rememberMe 기능이 동작함
.rememberMeParameter("remember") // html 화면에서 remember me 기능을 사용하는 체크박스의 name 부분
과 똑같아야함 , 기본 파라미터명은 remember-me
.tokenValiditySeconds(3600) // 쿠키의 유효기간설정 , 기본값은 14일
.alwaysRemember(true) // 리멤버미 기능이 활성화되지 않아도 항상 실행, html에서 체크박스 체크하는 상황없이
가능하게 하고싶을때 true , 기본값은 false
.userDetailsService(userDetailsService) // remember me 처리시 사용자 계정을 조회할때 필요한 클래스
반드시 필요함 !!...
Remember Me 설정
체크박스가 생긴 모습
rememberParameter에 설정한 "remember" 라는 이름으로 태그의 name이 설정된 모습
체크박스에 체크 안하고 로그인시 세션만 생긴모습 !!!
세션 삭제 후 리소스 접근시 로그인 페이지로 이동되는모습 !!!(remember me 쿠키가 없기 때문에 !)
체크박스 체크 후 로그인시 JSESSION과 remember-me 라는 이름을 가진 쿠키가 클라이언트에 생긴 모습!!
JSESSION 제거
루트 리소스("/") 접근 시 재 인증이 된 모습!