[TIL 74-1일 차] Spring Security 토큰 기반 인증/인가
5. Refresh Token 패턴 구현
5-01. Refresh Token
Access Token이 만료되었을 때 새로운 Access Token을 발급 받기 위한 수단
1) Access Token의 한계
Access Token은 사용자의 인증 정보를 포함하는 짧은 수명의 토큰
만료 시간에 따라 아래 문제 발생 가능
- 토큰 만료 시간이 너무 짧을 경우 ➡️ 사용자 자주 로그인 필요 ➡️ 불편한 사용자 경험
- 토큰 만료 시간이 너무 길 경우 ➡️ 토큰 탈취 시 장기간 악용 가능 ➡️ 심각한 보안 위협
이 균형을 맞추기 위해 Refresh Token이 필요
2) Access Token과 Refresh Token
| 구분 | Access Token | Refresh Token |
|---|---|---|
| 주요 역할 | 인증된 사용자 확인 | 새로운 Access Token 발급 |
| 사용 위치 | 매 요청 시 Authorization 헤더 | Access Token 만료 시 전용 API 호출 |
| 유효 기간 | 짧음 (30분 내외) | 김 (7일~30일) |
| 보관 위치 | 클라이언트 (메모리/스토리지) | 서버 DB 또는 안전한 스토리지 |
| 보안 위험 | 탈취되면 즉시 피해 발생 | 유효기간이 길어 서버 검증 필요 |
- 두 토큰은 항상 쌍(pair)으로 발급됨
동작 흐름
- 로그인 시 Access Token과 Refresh Token이 함께 발급됨
- 클라이언트는 API 요청 시 Access Token을 사용
- Access Token이 만료되면 Refresh Token을 사용해 새로운 Access Token을 요청
- 서버는 Refresh Token을 검증한 뒤 새로운 Access Token 발급
3) Refresh Token의 보안 이점
- 단기 노출 제한
- Access Token이 짧은 수명을 가지기 때문에 탈취 피해 감소
- 서버 검증 가능성
- Refresh Token은 서버가 직접 검증하기 때문에 위조 가능성이 낮음
- 토큰 재발급 제어
- 서버에서 Refresh Token을 무효화하면 사용자가 다시 로그인해야 함
- 로그아웃/비밀번호 변경 반영 용이
- 토큰 만료 또는 무효화를 통해 즉시 보안 상태 갱신 가능
단, 토큰 재발급 제어와 로그아웃/비밀번호 변경 반영 용이는 Refresh Token을 어딘가(DB 등)에서 관리하고 있을 때 가능
4) 토큰 회전(Rotation)
Refresh Token이 재발급될 때마다 이전 토큰을 무효화하고 새로운 토큰으로 교체하는 방식
-
토큰 갱신 흐름

5-02. 토큰 무효화 전략
1) 토큰 무효화 필요성
Refresh Token은 일반적으로 7일~30일의 긴 유효기간을 가지며, 사용자의 로그인 상태를 유지 시킴
하지만 아래의 경우에 반드시 토큰을 강제로 폐기(무효화) 해야 함
- 로그아웃
- 사용자가 명시적으로 세션 종료를 요청함
- Refresh Token 삭제 필요
- 비밀번호 변경
- 사용자의 계정이 위험에 노출될 가능성
- 기존 모든 토큰 무효화
- 강제 로그아웃
- 관리자가 보안 상의 이유로 세션 종료
- 선택된 사용자의 토큰 삭제
2) 토큰 무효화 동작 흐름
- 클라이언트가 로그아웃 요청
- 서버는 해당 사용자의 Refresh Token 확인 후 DB에서 삭제
- 서버가 로그아웃 응답 반환
- 클라이언트는 로컬 스토리지에 저장된 토큰을 함께 제거
Leave a comment