![translation](https://cdn.durumis.com/common/trans.png)
这是AI翻译的帖子。
选择语言
durumis AI 总结的文章
- JSON Web Token (JWT) 是一種用於安全傳輸資訊的加密 Token。
- JWT 由標頭、載荷和簽章組成,簽章確保資料的完整性。
- JWT 不需要管理狀態資訊,因此在分散式環境中具有高度可擴展性。
什麼是 JWT?
JSON Web Token(JWT) 是一種將資訊安全傳輸至 JSON 物件的方法,是一種公開的標準 (RFC 7519)。 顧名思義,將所需的資訊儲存在 token 中,並進行加密使用。
JWT 強調為簽署過的 token (signed token)。當使用公開/私鑰對進行簽署時,此簽署保證只有持有私鑰的當事人才能簽署該 token。也就是說,持有該金鑰的伺服器可以知道此 token 是否正常。
JWT 结构
JWT 由標頭 (Header)、有效載荷 (Payload) 和簽章 (Signature) 組成。
每個部分都使用 Base64 編碼,並使用點 (.) 作為分隔符。
標頭
{
"alg": "HS256",
"typ": "JWT"
標頭包含兩個主要資訊。token 的類型 (typ) 和使用的簽章演算法 (alg)。簽章演算法用於生成和驗證簽章。
typ 被指定為 "JWT",而 alg 為 HMAC、SHA256 等。如上所示,表示使用私鑰使用 HS256 演算法。
有效載荷
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
有效載荷包含要傳遞到 token 的宣告。使用者識別資訊或 token 的屬性以鍵值對的形式儲存。也就是說,開發人員可以隨意新增!
標準規範將鍵的名稱定義為簡潔的 3 個字母。
註冊的宣告如下。
- iss (Issuer) : 產生 token 的主體(包含產生 token 的主體的唯一識別資訊)
- sub (Subject) : token 的目標主體
- aud (Audience) : token 的接收者
- exp (Expiration Time) : token 的有效期限(超過此時間,token 將不再有效)
- nbf (Not Before) : token 的啟用日期(在此時間之前,無法使用 token)
- iat (Issued At) : token 的產生時間
- jti (JWT Id) : JWT token 識別碼(當有多個產生者時,用於區分這些產生者)
如果有其他需要的值,可以新增並使用。
但是,有效載荷不是加密的簽署值,因此不會包含敏感資訊。
解碼後,任何人都可以查看。jwt.io 可以在該網站上立即查看。
簽章
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
使用 base64 編碼的標頭和有效載荷的值,使用分隔符點 (.) 連接,並使用 your-256-bit-secret 伺服器持有的私鑰進行簽署。
因此,只有發佈 token 的伺服器可以使用私鑰解密簽章 (Signature)。
考慮到解密,可以使用私鑰解密簽章,然後檢查 base64UrlEncode(header) 是否與 JWT 的 heaer 值匹配,base64UrlEncode(payload) 是否與 JWT 的 heaer 值匹配。
除了簽章之外,標頭和有效載荷只進行了編碼,因此可以查看正文的資訊,但簽章可以確保資訊的完整性和安全性。
JWT 自身包含所有必要的資訊,是自包含的,為了彌補需要狀態的會話的缺點而創建的 JWT 不需要單獨的儲存庫。
伺服器端無需維護會話,無狀態,因此在分散式系統或微服務架構中的可擴展性很高。
簽章,數位簽章可以保護資訊,保證資料的完整性。