JWT (JSON Web Token)는 JSON 포맷을 사용하여 클레임(Claim)을 저장하고 전송하는 방법이다. 주로 인증과 권한 부여를 목적으로 사용된다. 클라이언트와 서버 간에 정보를 안전하게 전달하기 위해 JWT를 사용하는 것이 일반적이다.
JWT는 세 부분으로 나뉜다:
1. Header (헤더): 토큰의 타입과 해싱 알고리즘을 정의한다.
2. Payload (페이로드): 토큰에 담길 클레임 정보를 포함한다. 클레임에는 토큰이 발급된 시간, 유효 기간, 사용자 정보 등을 담을 수 있다.
3. Signature (서명): 헤더와 페이로드의 무결성을 보장하기 위해 서명한 부분이다. 이 서명은 비밀키를 사용해 생성된다.
예시:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
각각의 파트는 Base64URL로 인코딩되어 점(.)으로 구분된다.
Header는 JWT의 메타 데이터를 포함하는 부분이다. 일반적으로 두 가지 정보를 담는다:
예시:
{
"alg": "HS256",
"typ": "JWT"
}
Payload는 클레임(Claim)이라고 불리는 사용자 및 관련 데이터가 저장된 부분이다. 클레임은 크게 세 가지로 분류된다:
iss, exp, sub, aud).예시:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Signature는 헤더, 페이로드, 비밀키를 결합한 후 해싱 알고리즘으로 생성된다. 이를 통해 데이터의 무결성을 보장하고, 누군가 토큰을 위조하는 것을 방지할 수 있다.
예시 서명 생성:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT는 주로 인증(Authentication)과 권한 부여(Authorization)에서 사용된다.