[Lv1] JWT 的結構是什麼?
面試官常會接著問:「JWT 長什麼樣子?為什麼要這樣設計?」搞清楚結構、編碼方式與驗證流程,就能快速回答。
1. 基本輪廓
JWT(JSON Web Token)是一種 自包含(self-contained) 的 Token 格式,用來在雙方之間安全地傳遞資訊。內容由三段字串構成,使用 . 串接:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
拆開來看就是三個 Base64URL 編碼的 JSON:
- Header:描述 Token 使用的演算法、類型。
- Payload:存放使用者資訊與宣告(claims)。
- Signature:用密鑰簽章,確保內容未被竄改。
2. Header、Payload、Signature 詳解
2.1 Header(標頭)
{
"alg": "HS256",
"typ": "JWT"
}
alg:簽章演算法,例如HS256(HMAC + SHA-256)、RS256(RSA + SHA-256)。typ:Token 類型,通常為JWT。
2.2 Payload(載荷)
{
"sub": "1234567890",
"name": "Jane Doe",
"iat": 1516239022,
"exp": 1516242622,
"role": "admin"
}
- Registered Claims(官方保留,但非必填):
iss(Issuer):簽發者sub(Subject):主題(通常是使用者 ID)aud(Audience):接收對象exp