JWT(JSON Web Token)是一種用于 無狀態認證 的輕量級令牌,廣泛用于分布式系統、單頁應用(SPA)和移動端登錄。
JWT 結構概覽
JWT 由 三部分組成,用 .
分隔:
xxxxx.yyyyy.zzzzz
Header(頭部)
Payload(載荷)
Signature(簽名)
Header(頭部)
作用:聲明 JWT 的類型和簽名算法
{ "alg": "HS256", "typ": "JWT" }
alg
:簽名算法(如 HMAC SHA256)typ
:JWT 類型,固定值"JWT"
頭部告訴服務器如何去驗證簽名,是 JWT 的元信息
?Payload(載荷)
作用:存儲 用戶信息和聲明(Claims)
常見字段:
字段 | 說明 |
---|---|
sub | 主題(通常是用戶 ID) |
iat | 簽發時間 |
exp | 過期時間 |
role | 用戶角色或權限 |
自定義字段 | 例如 username: "Alice" |
注意:Payload 不加密,僅 Base64Url 編碼,不能存儲敏感信息
Signature(簽名)
作用:保證 JWT 安全性,是 JWT 的核心部分
(1) 防篡改(Integrity)
確保 Header 和 Payload 未被篡改
機制:
服務器生成 JWT 時,用密鑰對 Header + Payload 計算簽名
客戶端傳回 JWT,服務器重新計算簽名
如果匹配 → 數據未被修改
(2) 驗證身份(Authenticity)
確保 JWT 確實由服務器簽發
客戶端無法偽造合法簽名,因為生成簽名需要 服務器密鑰
(3) 支持無狀態認證(Stateless Authentication)
JWT 自帶驗證機制,服務器無需存儲 Session
非常適合 分布式系統、微服務架構
(4) 簽名生成示意
Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload),secret
)
舉例說明一下,Header + Payload 是信件內容,Signature 是密封的簽章,保證內容未被篡改且可信
小結
部分 | 作用 |
---|---|
Header | 指明類型和簽名算法 |
Payload | 存放用戶信息和聲明(Claims) |
Signature | 核心安全保障: |
核心思想:JWT 是 自包含 + 可驗證 的令牌,Signature 保證你可以信任客戶端傳回的內容。