정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
RememberMe 인증
- 사용자가 웹 사이트나 애플리케이션에 로그인할 때 자동으로 인증 정보를 기억하는 기능
- UsernamePasswordAuthenticationFilter와 함께 사용됨
- 폼인증 / httpBasic 인증 등 인증 방식의 인터페이스에 포함됨 → 인증 과정 내부에서 호출됨!
- 인증 성공 시 RememberMeServices.loginSuccess() ≫ RememberMe 토큰을 생성하고 쿠키로 전달
- 인증 실패 시 RememberMeServices.loginFail() ≫ 쿠키를 지움 (보안을 위해 기존 저장되어 있던 쿠키도 삭제)
- LogoutFilter와 연계하여 로그아웃 시 쿠키를 지움
토큰 생성
- 기본적으로 암호화된 토큰으로 생성됨
- 단방향이기 때문에 복호화되지 않음
- 유출되면 그 토큰 정보로 로그인은 가능 / 유출된 토큰을 통해 개인정보 식별은 불가
- 브라우저에 쿠키를 통해 토큰을 보냄 → 세션에서 이 쿠키를 감지하여 자동 로그인이 이루어지는 방식
- base64(username + ":" + expirationTime + ":" + algorithmName + ":" +
algorithmHex(username + ":" + expirationTime + ":" + password + ":" + key))- username : UserDetailService로 식별 가능한 사용자 이름
- password : 검색된 UserDetails에 일치하는 비밀번호
- expirationTime : remember-me 토큰이 만료되는 날짜와 시간, 밀리초로 표현
- key : remember-me 토큰의 수정을 방지하기 위한 개인 키
- algorithmName : remember-me 토큰 서명을 생성하고 검증하는 데 사용되는 알고리즘 (기본적으로 SHA-256 알고리즘 사용)
- algorithmHex : 이 부분이 암호화되는 정보
RememberMeServices 구현체
- RememberMeServices는 인터페이스, 2가지 구현체가 있음
- 해싱을 통해 암호화된 RememberMe 토큰을 생성하고 쿠키로 전달하는 역할
- TokenBasedRememberMeServices : 쿠키 기반 (메모리 방식) 토큰의 보안을 위해 해싱을 사용
- PersistentTokenBasedRememberMeServices : 생성된 토큰을 저장하기 위해 데이터베이스나 다른 영구 저장 매체를 사용
- 대부분 TokenBasedRememberMeServices로 처리해도 문제 없음
- 두 구현 모두 사용자의 정보를 검색하기 위한 UserDetailsService가 필요 : 해싱에 필요한 username, password 등의 정보를 가져오기 위해
rememberMe() API
- RememberMeConfigurer 설정 클래스를 통해 여러 API들을 설정할 수 있음
- 내부적으로 RememberMeAuthenticationoFilter가 생성되어 자동 인증 처리를 담당

- alwaysRemember : 기억하기(remember-me) 매개변수가 설정되지 않았을 때에도 쿠키가 항상 생성되어야 하는지 여부
- 즉, 기억하기 인증을 위한 체크박스에 체크하지 않아도 항상 기억하기 기능을 유지할 건지
- 기본값은 false
- true로 설정하지 않는 것이 일반적
- tokenValiditySeconds : 토큰이 유효한 시간 지정 (초 단위)
- userDetailsService : UserDetails를 조회하기 위해 사용되는 UserDetailsService 지정
- rememberMeParameter : 로그인 시 사용자를 기억하기 위해 사용되는 HTTP 매개변수
- input 태그(체크박스)의 name 지정
- 기본값은 'remember-me'
- 기본값과 다른 값을 지정한 경우, Spring Security가 생성해주는 기본 로그인 페이지에는 자동 적용되지만 따로 로그인 페이지를 만드는 경우 name 속성을 동기화시켜야 함

- rememberMeCookieName : 기억하기(remember-me) 인증을 위한 토큰을 저장하는 쿠키 이름
- 기본값은 'remember-me'
- 토큰의 이름 지정

- key : 기억하기(remember-me) 인증을 위해 생성된 토큰을 식별하는 키 설정 → 개인 키 !
동작 과정
1. rememberMe() API 설정

- alwaysRemember : false
2. 인증 없이 localhost:8080 접속 → 로그인 페이지

- remember-me 기능을 위한 체크박스 생성됨
3. 체크박스 체크 후 로그인
4.

- 세션 쿠키 이외에 'remember' 토큰이 함께 전달됨
- 값은 암호화된 토큰값
5. 세션 쿠키 삭제 후 다시 접속 → remember 쿠키 존재하므로 로그인이 유지됨
6. remember 쿠키까지 모두 삭제 후 다시 접속 → 재인증 필요 → 로그인 페이지
'spring security' 카테고리의 다른 글
| 익명 인증 사용자 - anonymous() (0) | 2025.01.28 |
|---|---|
| 기억하기 인증 필터 - RememberMeAuthenticationFilter (0) | 2025.01.28 |
| 기본 인증 필터 - BasicAuthenticationFilter (0) | 2025.01.27 |
| 기본 인증 - httpBasic() (0) | 2025.01.27 |
| 폼 인증 필터 - UsernamePasswordAuthenticationFilter (0) | 2025.01.19 |