2024-10-19 009_學寫API_JWT的組成
2024-10-19 009_學寫API_JWT的組成
這個字符串是一個典型的 JSON Web Token (JWT),它由三部分組成,用 .
分隔,分別代表 Header、Payload(即 Claims),和 Signature。
JWT 組成
這個 Token 的組成部分如下:
Header 部分(頭部):
1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- 解碼後的內容:
1
2
3
4{
"alg": "HS256", // 算法:HMAC-SHA256
"typ": "JWT" // 類型:JWT
} - 作用:
- Header 指定了 Token 的類型(typ)和簽名算法(alg)。在這裡,算法是
HS256
,即使用 HMAC-SHA256 算法來進行簽名。
- Header 指定了 Token 的類型(typ)和簽名算法(alg)。在這裡,算法是
- 解碼後的內容:
Payload 部分(負載):
1
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
- 解碼後的內容:
1
2
3
4
5{
"sub": "1234567890", // 主題(Subject),通常是用戶 ID
"name": "John Doe", // 用戶的姓名
"iat": 1516239022 // Token 的發行時間(Issued At),通常是 UNIX 時間戳
} - 作用:
- Payload 包含了一些用戶信息,這些信息稱為 Claims,用來描述 Token 所代表的實體,通常包括身份信息(如用戶名、用戶 ID 等)。
- 解碼後的內容:
Signature 部分(簽名):
1
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
如何生成:
- 簽名是對前兩部分 (
Header
和Payload
) 的 Base64URL 編碼的內容進行加密生成的。 - 使用的方法是
HMAC-SHA256
,加密的密鑰是服務器上預先設置的。 - 算法:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
- 簽名是對前兩部分 (
作用:
- 簽名的作用是保證 Token 的完整性。當接收到這個 Token 時,服務器可以使用相同的密鑰重新計算簽名,並與 Token 中的簽名部分進行比對,來驗證數據是否被篡改。
解釋 Token 中的 Claims
- Header 主要用來描述 Token 的元數據,像加密算法等。
- Payload 包含一些 Claims,例如:
- sub(Subject):這裡的值是
"1234567890"
,通常表示用戶 ID 或唯一標識符。 - name:用戶的姓名,這裡是
"John Doe"
。 - iat(Issued At):Token 的簽發時間,這裡是 UNIX 時間戳
"1516239022"
,表示 Token 是在某個具體的時間點生成的。
- sub(Subject):這裡的值是
作用
- 這個 Token 用來對用戶的身份進行驗證和授權。
- Token 一旦生成,可以作為後續 HTTP 請求的憑據,通過
Authorization
Header 傳遞給服務器:1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- 服務器會解碼這個 Token,並檢查簽名是否正確,以及 Token 是否在有效期內。
這樣的機制讓用戶可以不需要每次請求都輸入帳號密碼,只需要在首次登入時提供正確的憑證,之後可以使用 Token 來認證和授權。