Spring/Spring Security
[JWT] 2. AccessToken과 RefreshToken
noahkim_
2023. 10. 3. 02:22
1. AccessToken
- 인증된 사용자가 자원 서버에 보안 리소스를 요청할 떄 인증을 대신하는 권한 토큰
항목 | 설명 |
클레임 (Claims) | - 인증 외의 부가 정보 저장 - 사용자 정의 클레임 추가 가능 (예: IP, 기기 정보 등) |
유효기간 (Expiration) |
- 보안을 위해 짧게 설정 (예: 1시간)
- 노출 시에도 장시간 사용 방지 목적 - 만료 시 토큰은 무효 처리되고, 재요청 필요 |
2. RefreshToken
- AccessToken 갱신용 토큰: AccessToken이 만료될 때, 새로운 AccessToken을 요청하기 위한 토큰
항목 | 설명 |
사용자 경험 향상 |
- Access Token 만료 시 재로그인 없이 자동 재발급 가능
- 사용자 인증 요청을 줄여 UX 개선 |
유효기간 |
- Access Token보다 긴 유효시간을 가짐 (보통 며칠~수개월)
- 장기 인증 유지에 사용 |
보관 위치 (서버) |
- 주로 서버에 저장하여 관리
- 탈취 시 서버에서 무효화 가능 - 발급되는 Access Token의 속성 조정 가능 |
보안 위험성 |
- 긴 유효기간으로 인해 노출 시 위험 큼 (탈취 시 시스템에 장기간 무단 접근 가능)
- 반드시 안전하게 저장 필요 (예: HttpOnly Cookie) |
3. 동작 과정

로그인
- 로그인
- 클라이언트: 로그인 정보를 서버에 전송합니다.
- 검증
- 제공된 로그인 정보 검증
- 응답
- 서버: AccessToken와 RefreshToken 생성 및 응답 (Cookie: httpOnly)
- 클라이언트: AccessToken와 RefreshToken을 보관 (Session Storage)
인증
- 요청
- 서버에 요청을 보낼때마다 AccessToken을 보냄
- Authorization 헤더를 사용하여 Bearer 형태로 전송
- 토큰 검증
- 요청에 포함된 AccessToken 검증 (서명 유효성, 토큰의 만료 여부 등)
- 응답
- 검증에 성공하면 요청된 작업을 수행합니다.
AccessToken 재발급 (RefreshToken)
- 인증 실패 (AccessToken 만료)
- 재발급 시도
- 클라이언트는 저장된 RefreshToken 사용하여 Authorization Server에 AccessToken 발급 요청
- RefreshToken 유효성 검사
- 서명 유효성, 만료 여부 등
- 새로운 AccessToken를 생성하여 클라이언트에게 응답
참고