1. AccessToken
권한 토큰
- 보안 리소스를 접근하고자 하는 유저에게 부여
- 사용자 정의 클레임을 두어 사용할 수 있습니다. (IP 등)
유효기간
- 보안상 을 짧은 시간으로 설정 (1시간)
- 공격자에 의해 노출되더라도 오랜시간 사용하지 못하게 하기 위함입니다.
- 만료 시, 재요청이 필요합니다 (만료되면 효과가 없습니다.)
2. RefreshToken
권한 토큰 갱신
- AccessToken이 만료될 때, 새로운 AccessToken을 요청하기 위한 토큰입니다.
유효기간
- AccessToken과 다르게 긴 유효시간을 가집니다.
사용자 경험 향상
- 주기적인 AccessToken 발급에 대한 사용자 인증 요청을 줄일 수 있음
- AccessToken이 만료되면, 클라이언트는 새로운 AccessToken을 받기위해 인증서버에 새로운 요청을 해야 합니다.
- 계속해서 요청할 경우 사용자 경험이 나빠집니다.
- RefreshToken을 사용하여 자동으로 AccessToken을 발급받을 수 있어 사용자는 자주 인증과정을 거치지 않아도 됩니다.
보관 (서버)
- 클라이언트 접속을 더 효과적으로 관리할 수 있도록 돕습니다.
- 공격자에게 노출되었을 경우 무효화할 수 있습니다.
- RefreshToken을 통해 발급된 AccessToken의 속성을 변경할 수 있습니다.
위험성 (보안 매우 중요)
- 노출될 경우, 긴 유효기간을 가지므로 그 기간동안 시스템을 무제한으로 액세스할 수 있습니다.
3. 사용 과정
인증 요청
- 클라이언트: 로그인 정보를 서버에 전송합니다.
- 서버: 제공된 로그인 정보를 검증합니다.
JWT 생성 (서버)
- payload 생성 (사용자 정보 + 메타데이터)
- JWT 생성 (비밀키로 JWT 서명)
응답
- 서버: AccessToken와 RefreshToken 생성 및 응답 (Cookie: httpOnly)
- 클라이언트: AccessToken와 RefreshToken을 보관 (Session Storage)
인증된 요청
- 클라이언트
- 서버에 요청을 보낼때마다 AccessToken을 보냄
- Authorization 헤더를 사용하여 Bearer 형태로 전송합니다.
- 서버
- 요청에 포함된 JWT를 검증합니다. (서명 유효성, 토큰의 만료 여부 등)
- 검증에 성공하면 요청된 작업을 수행합니다.
RefreshToken 사용
- AccessToken가 만료될 경우, 클라이언트는 새로운 AccessToken를 요청합니다. (저장된 RefreshToken 사용)
- 서버
- RefreshToken 유효성 검사 (서명 유효성, 만료 여부 등)
- 새로운 AccessToken를 생성하여 클라이언트에게 응답
참고
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security][KoLiving] 4-1. JwtAuthenticationFilter (0) | 2023.10.03 |
---|---|
[Spring Security][KoLiving] 4. JWT 토큰 기반 인증 (0) | 2023.10.03 |
[JWT] 1. JWT Token (0) | 2023.10.03 |
[Spring Security] 3-4. 인증: 로그아웃 (0) | 2023.10.03 |
[Spring Security] 3-3. 인증: 패스워드 저장소 (0) | 2023.10.02 |