JWT는 점(.)으로 구분된 세 부분으로 구성됩니다.
xxxxx.yyyyy.zzzzz
header.payload.signature
각 부분은 Base64Url로 인코딩됩니다.
토큰의 메타데이터를 담습니다.
{
"alg": "HS256",
"typ": "JWT"
}
alg: 서명 알고리즘을 지정합니다 (HS256, RS256, ES256 등)typ: 토큰 타입을 나타냅니다 (보통 JWT)실제로 전달할 데이터(Claim)를 담습니다. Claim은 세 가지로 나뉩니다.
Registered Claims (표준 정의)
iss (issuer): 발급자sub (subject): 토큰의 주체 (보통 사용자 ID)aud (audience): 수신자exp (expiration): 만료 시각 (Unix timestamp)nbf (not before): 이 시각 이전에는 사용할 수 없습니다iat (issued at): 발급 시각jti (JWT ID): 토큰 고유 식별자Public Claims
Private Claims
role, userId){
"sub": "1234567890",
"name": "John Doe",
"role": "USER",
"iat": 1700000000,
"exp": 1700003600
}
Payload는 인코딩만 될 뿐 암호화되지 않기 때문에 누구나 디코딩하여 내용을 볼 수 있습니다. 따라서 민감 정보를 담으면 안 됩니다.
Header와 Payload의 위변조를 검증하는 부분입니다.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
Authorization: Bearer <token> 헤더에 JWT를 포함시킵니다