JWT(JSON Web Token)
-an open stand that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.
-JWTs can be signed using a secret (with the "HMAC" algorithm) or a public/privaate key pair using RSA or ECDSA.
HMAC: Hash-based Message Authentication Code
JWT는 점으로 구분된 3개의 Base64URL 문자열로 구성됨.
xxxxx.yyyyy.zzzzz
header.payload.signature
--Token 구성요소---
Header
는 일반적으로 토큰 유형(JWT)과 사용 중인 서명 알고리즘 (HMAC SHA256)을 나타내는 정보를 포함
{
"alg": "HS256",
"typ": "JWT"
}
Payload
Token의 두 번째 부분은 Claim을 포함. Claim은 entity(일반적으로 사용자) 및 추가 정보에 대한 설명을 말함.
Claim은 세 종류가 있음
-registered claim: iss(issuer), exp(expiration time), sub(subject), aud(audience) 같은 클레임 집합.
{
"sub": "12345",
"name": "Tung",
"admin": true
}
Signature
는 헤더의 인코딩 값과 정보의 인코딩 값을 합쳐서 주어진 비밀키로 해싱하여 생성되는 서명 값. 보통 사용자의 비밀번호를 비밀키로 사용하기도 함.
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)