在軟體架構領域,特別是在處理多方和安全身份驗證/授權時,用於共享身分證明的強大機制至關重要。最安全且使用最廣泛的方法之一是 JSON Web Token (JWT) 🔏。

在本部落格中,我們將深入探討 JWT 是什麼、它們如何運作以及為什麼它們是安全資料傳輸的絕佳選擇。

什麼是 JSON Web 令牌 (JWT)?

JSON Web Token (JWT) 是一種開放式標準 (RFC 7519),它定義了一種緊湊且獨立的方式,以 JSON 物件的形式在各方之間安全地傳輸資訊。這些資訊可以被驗證和信任,因為它是經過數位簽署的。 JWT 可以使用秘密(使用 HMAC 演算法)或使用 RSA 或 ECDSA 的公鑰/私鑰對進行簽署。

為什麼要使用JWT ?

JWT 是無狀態的,這意味著伺服器不需要在會話中儲存令牌資訊。這種無狀態特性使得 JWT 可擴展並適合客戶端-伺服器應用程式和分散式系統。以下是 JWT 受到青睞的一些關鍵原因:

  1. 安全性:JWT經過數位簽名,確保資料不會被竄改。

  2. 可擴展性:JWT 是無狀態的,不需要伺服器端存儲,這使得它們非常適合分散式系統。

  3. 緊湊:JWT 很緊湊,可以透過 URL、POST 參數或 HTTP 標頭輕鬆發送。

  4. 自包含:JWT 的有效負載包含目標使用者所需的所有訊息,無需多次查詢資料庫。

傑威特

JWT 的結構

JWT 由三個部分組成:標頭、有效負載和簽名。這些部分由點 (.) 分隔

Header.Payload.Signature

讓我們分解每個元件:

1️⃣ 標題

標頭通常由兩部分組成:令牌類型(JWT)和所使用的簽章演算法(例如 HMAC、SHA256 或 RSA)。

例子:

{
  "alg": "HS256",
  "typ": "JWT"
}

然後,對該 JSON 物件進行 Base64Url 編碼以形成 JWT 的第一部分。

2️⃣ 有效負載

有效負載包含聲明。聲明是關於實體(通常是使用者)和附加資料的聲明。索賠分為三種類型:註冊索賠、公共索賠和私人索賠。

  • 註冊聲明:這些是一組預先定義的聲明,不是強制性的,而是建議的,例如iss (發行者)、 exp (到期時間)、 sub (主題)、 aud (受眾)等。

  • 公共聲明:可以隨意定義,但應該是抗衝突的或命名空間的。

  • 私人聲明:這些是自訂聲明,用於在同意使用它們的各方之間共享資訊。

例子:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

此 JSON 物件也經過 Base64Url 編碼以形成 JWT 的第二部分。

3️⃣簽名

若要建立簽章部分,您必須採用編碼標頭、編碼有效負載、秘密以及標頭中指定的演算法。簽名用於驗證 JWT 的發送者是否是其所說的發送者,並確保訊息在此過程中沒有被更改。

例如,如果要使用 HMAC SHA256 演算法,則簽名將如下建立:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

然後簽名經過 Base64Url 編碼並形成 JWT 的第三部分。

做

JWT 如何運作

當客戶端想要存取受保護的資源時,它會在 HTTP 請求的 Authorization 標頭中包含 JWT,類似於 Bearer Token。伺服器執行一組步驟來驗證 JWT。如果所有驗證步驟都通過,伺服器將認為 JWT 有效並授予對所請求資源的存取權。

步驟如下:

1️⃣解碼 JWT :伺服器解碼 JWT 以提取標頭和有效負載。

解碼

2️⃣驗證簽章:伺服器透過將簽章演算法重新套用於標頭、有效負載和金鑰來驗證簽章。如果重新計算的簽章與JWT中的簽章匹配,則表示令牌沒有被竄改。

3️⃣檢查過期時間:伺服器檢查有效負載中的過期時間,以確保令牌沒有過期。

4️⃣附加檢查:根據應用程式的要求,伺服器可能會執行附加檢查,例如驗證令牌頒發者或根據已撤銷令牌清單檢查令牌。

傑威特

JWT 在現實場景中的應用

讓我們探討一下 2024 年 JWT 的一些實際應用:

  1. 單一登入 (SSO) 仙境:

想像一下,登入您公司的生態系統一次即可無縫存取多種服務。 JWT 讓這個夢想成為現實,跨不同網域安全地傳遞您的身份驗證狀態。

  1. 微服務編排:

在微服務領域,JWT 充當完美的信使。它們在服務之間攜帶身份驗證和授權訊息,確保安全且有效率的通訊。

  1. 物聯網設備身份驗證:

當您的智慧冰箱與智慧烤麵包機對話時(是的,我們將在 2024 年實現),JWT 確保只有授權設備才能交換資料。

  1. 無伺服器功能授權:

隨著無伺服器架構的興起,JWT 提供了一種無狀態方式來授權函數呼叫,而無需持久會話。

JWT 2024 年最佳實踐

  1. 保密、安全:

保護您的簽名密鑰,就像它們是 One Ring 一樣。使用金鑰管理服務並定期輪替金鑰。

  1. 不要過度包裝您的代幣:

保持較小的有效負載。 JWT 不能替代資料庫!

  1. 設定合理的過期時間:

短期令牌(想想幾分鐘,而不是幾天)可以最大限度地降低令牌被洩露的風險。

  1. 實施令牌撤銷:

在需要時使用令牌黑名單或 Redis 快取使令牌失效。

  1. 全程 HTTPS :

始終透過加密連線傳輸 JWT。沒有例外!

JWT 的實踐

JWT 的用途非常廣泛,可用於各種場景。例如,它們通常用於授權後端 API,同時維護相同的權限集。許多現代應用程式(包括 Appwrite)都支援基於 JWT 的身份驗證,以確保安全且有效率的授權流程。

結論

JSON Web 令牌 (JWT) 是現代 Web 應用程式中安全資訊共享的強大工具。它們提供了一種緊湊、獨立且安全的資料傳輸方式,使其成為從無狀態驗證到安全 API 等各種用例的絕佳選擇。透過理解和實施 JWT,開發人員可以增強其應用程式的安全性和可擴展性。


原文出處:https://dev.to/vyan/understanding-json-web-tokens-jwt-for-secure-information-sharing-5c3a


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝59   💬2  
836
🥈
NewsData
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登