Header , Payload , Signature 각각의 구성 요소가 점(.)으로 구분되어있는 형태
ex) xxxx.yyyy.zzzz
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Payload 에는 보통 Claim이라는 사용자에 대한, 혹은 토큰에 대한 property를 Key-Value 형태로 저장
대표적인 Claim
1. iss (Issuer) : 토큰 발급자
2. sub (Subject) : 토큰 제목 - 토큰에서 사용자에 대한 식별 값이 됨
3. aud (Audience) : 토큰 대상자
4. exp (Expiration Time) : 토큰 만료 시간
5. nbf (Not Before) : 토큰 활성 날짜 (이 날짜 이전의 토큰은 활성화되지 않음을 보장)
6. iat (Issued At) : 토큰 발급 시간
7. jti (JWT Id) : JWT 토큰 식별자 (issuer가 여러 명일 때 이를 구분하기 위한 값)
→ payload에 민감한 정보를 담으면 안됨
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
{ your-256-bit-secret }
)
SecretKey 를 통해서만 디코딩 가능SecretKey 를 통해 복호화한 뒤, base64UrlEncode(header) 가 JWT header 와 일치하는지, base64UrlEncode(payload) 가 JWT payload 와 일치하는 지 검증