JWT는 3가지 부분으로 구성되며, 각 부분은 .(점)으로 구분되며,
각 부분은 Base64 URL로 인코딩되며,
Signature 부분은 특정서명 알고리즘을 사용하여 생성됩니다.
xxxxx.yyyyy.zzzzz
| 부분 | 설명 |
|---|---|
| Header (헤더) | JWT의 타입과 서명(Signature) 알고리즘을 정의 |
| Payload (페이로드) | 토큰에 포함된 사용자 정보(클레임) 저장 |
| Signature (서명) | 데이터 변조 방지를 위한 전자 서명 |
JWT의 발급 정보를 담고 있는 부분
{
"alg": "HS256",
"typ": "JWT"
}
alg (Algorithm): 서명에 사용할 해싱 알고리즘 (예: HS256, RS256)
typ (Type): 토큰의 타입 (항상 "JWT")
필요한 정보를 담고 있는 부분
{
"sub": "user123",
"name": "홍길동",
"iat": 1710000000,
"exp": 1710600000,
"role": "admin"
}
클레임(Claim)은 JWT 내부에 포함되는 정보이며,
일반적으로 다음과 세 가지 유형이 있습니다.
등록된 클레임 (Registered Claims)
iss (Issuer) : 토큰 발급자
sub (Subject) : 토큰 대상 (사용자 ID 등)
aud (Audience) : 토큰 대상 시스템
exp (Expiration) : 토큰 만료 시간 (Unix Timestamp)
iat (Issued At) : 토큰 발급 시간
nbf (Not Before) : 특정 시간 전까지는 유효하지 않음
공개 클레임 (Public Claims)
조직 내에서 정의한 클레임 role, email, username 등
비공개 클레임 (Private Claims)
특정 애플리케이션에서만 사용하는 클레임 order_id, customer_id 등
데이터 무결성을 보장하는 서명(Signature)부분.
header와 payload를 Base64 URL 인코딩하여 결합한 후 비밀 키(secret key)를 이용해 HMAC, RSA, 또는 ECDSA 방식으로 서명 생성
이 서명으로 데이터 변조가 감지 가능하며,
인증 서버가 발급한 JWT인지 검증 가능
JWT는 일반적으로 로그인시에 발급되며, 이후 요청마다 포함되어
사용자를 인증하는 역할을 합니다.