디코딩 전
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsInJvbGVzIjoiUk9MRV9VU0VSIiwiZXhwIjoxNjI2MTQ5OTk5fQ.rfr3r5kU9sHuyu9cyEe5EBvGosRFF4s0PfPdS91QDSI
디코딩 후,
{
"sub": "user1",
"roles": "ROLE_USER",
"exp": 1626149999
}
secretKey: JWT를 서명하기 위한 비밀 키로 서명된 토큰을 검증할 때 사용된다. 인코딩된 페이로드를 디코딩할 때 사용된다.
accessTokenValidTime: 발급된 액세스 토큰의 유효 시간으로 토큰은 발행 시점에서 유효 시간 만큼만 유효하며, 이 시간이 지나면 만료된다.
refreshTokenValidTime: 발급된 액세스 토큰의 유효 시간으로 토큰은 발행 시점에서 유효 시간 만큼만 유효하며, 이 시간이 지나면 만료된다. 리프레시 토큰은 주로 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받기 위해 사용된다.
issuer: JWT의 발급자(issuer) 정보이다. 발급된 토큰이 어디에서 발급되었는지를 나타내는 식별자이다.
tokenPrefix: 클라이언트가 JWT를 식별할 수 있도록 토큰 앞에 붙이는 접두어입니다. 예를 들어, "Bearer "와 같이 인증 헤더에 토큰을 식별하기 위해 사용된다.
header: HTTP 요청에서 JWT를 식별할 헤더의 이름입니다. 보통 "Authorization" 헤더에 JWT를 실어 보낸다.
@RedisHash
: 이 클래스가 Redis의 해시(hash) 데이터 구조로 저장될 것임을 나타내는 애노테이션입니다. 여기서 value는 Redis에서 해당 클래스의 객체가 저장될 해시의 이름을 의미한다. 뒤에 TimeToLive
는 레디스에 저장된 값의 저장기간을 의미한다.
@Id
: redis의 key로 사용하겠다는 의미이다. 여기서는 redis에 값이 저장될 때 userId가 key, 저장되는 값이 value가 되는 것이다.
결과를 보면 "refreshToken:{userId}" 형식으로 key가 형성되고 value로 refreshToken의 값이 들어갔다.
앞에 있는 refreshToken은 아까 말한대로 @RedisHash로 생성된 해시의 이름이다.
timeToLive와 jwt토큰의 expiration의 차이점
ResponseCookie.from(name, value)
: 주어진 이름(name)과 값(value)으로 ResponseCookie 객체를 생성maxAge()
: 쿠키의 생명 주기 (TTL)를 설정path("/")
: 쿠키의 경로를 설정합니다. 여기서는 모든 경로에서 쿠키가 유효하도록 /로 설정domain(domain)
: 쿠키가 유효한 도메인을 설정httpOnly(true)
: 쿠키를 HTTP 전용으로 설정하여, 클라이언트 측 스크립트에서 접근할 수 없도록 함secure(true)
: 이 속성이 true로 설정되면, 쿠키는 HTTPS 연결에서만 전송sameSite()
: 쿠키의 SameSite 속성을 설정하여, CSRF 공격을 방지response.addHeader("Set-Cookie", cookie.toString())
: 빌드한 ResponseCookie 객체를 문자열로 변환하여 HTTP 응답 헤더에 추가마지막으로 아래 코드는 생성된 엑세스 토큰을 HTTP 응답 헤더에 세팅하는 코드이다. "Authorization"는 설정하려는 헤더의 이름으로 인증 토큰을 담는 데 사용된다.
response.setHeader("Authorization", accessTokenValue);