跳至主要內容
FreeOnlineTools Go
繁體中文
解釋

什麼是 JWT?JSON Web Token 的完整說明

作者:FreeOnlineTools Team · 更新日期:2026-09-02

快速解答

JWT 是一個字串,由點分隔的三個 Base64URL 編碼部分組成:header.payload.signature。標頭指定演算法,有效負載包含聲明(使用者 ID、角色、過期時間),簽名證明真實性。 JWT 用於無狀態身份驗證。使用我們免費的 JWT 解碼器檢查瀏覽器中的令牌內容。

介紹

JWT (JSON Web Token) 是 RFC 7519 定義的一種緊湊的 URL 安全令牌格式,用於在各方之間作為 JSON 物件安全地傳輸訊息。 JWT 廣泛用於 Web 應用程式中的驗證和授權:使用者登入後,伺服器會發出 JWT ,用戶端將其包含在後續請求中以證明身分。 JWT 是無狀態的-伺服器不需要在資料庫中尋找令牌;令牌本身包含使用者的聲明和證明其未被篡改的簽章。

步步

  1. 理解三部分結構

    JWT 有三個部分:標頭(演算法和類型)、有效負載(聲明)和簽章(證明完整性)。每個部分都經過 Base64URL 編碼並用點分隔:eyJhbGciOi...J9.eyJzdWIi...J9.signature。任何擁有令牌的人都可以讀取前兩部分;只有簽名需要密鑰。

  2. 了解標準聲明

    有效負載包含聲明-有關主題的陳述。標準聲明:「sub」(主題/使用者 ID)、「iat」(在時間戳處發布)、「exp」(過期)、「nbf」(不早於)、「iss」(發布者)、「aud」(受眾)。自訂聲明可以包括角色、權限或任何其他資料。

  3. 了解簽名演算法

    JWT 使用對稱(HS256 - 共享金鑰)或非對稱(RS256、ES256 - 公鑰/私鑰對)簽署。簽章可防止竄改:更改令牌的任何部分都會使簽章無效。只有秘密/私鑰的持有者才能創建有效的令牌。

  4. 使用 JWT 進行身份驗證

    登入後,伺服器建立一個 JWT 並將其傳送給客戶端。用戶端在後續請求的授權標頭(承載令牌)中包含 JWT 。伺服器驗證簽名並檢查過期情況—無需查找資料庫。

範例

JWT 結構

輸入: 典型的 JWT

輸出: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature

解碼標頭

輸入: 第一部分已解碼

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

解碼後的有效負載

輸入: 第二部分解碼

輸出: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}

常見問題

  • 解碼與驗證-解碼 JWT (讀取其內容)並不能證明它是真實的。在信任聲明之前,請務必使用金鑰驗證簽章伺服器端。
  • 將 JWT 儲存在 localStorage 中——這使得 JavaScript 可以存取它們,從而容易受到 XSS 攻擊。儲存在 httpOnly cookie 中以獲得更好的安全性。
  • 長期令牌-如果令牌被盜,它在過期之前仍然有效。將短期存取令牌(15-60 分鐘)與刷新令牌一起用於長時間會話。
  • 有效負載中的敏感資料-任何擁有令牌的人都可以讀取有效負載(它是 Base64,未加密)。切勿將密碼、信用卡或機密資訊放入有效負載中。

提示

  • 在信任任何聲明之前,請務必驗證伺服器端的 JWT 簽章 - 單獨解碼並不是驗證。
  • 在長時間會話中使用短期存取令牌(15-60 分鐘)和刷新令牌,以最大程度地減少令牌盜竊造成的損失。
  • 將 JWT 儲存在 httpOnly、Secure、SameSite cookie 而不是 localStorage 中,以防止 XSS 攻擊。
  • 使用我們的 JWT 解碼器檢查令牌內容以進行偵錯 - 您的令牌永遠不會離開您的瀏覽器。

相關工具

相關指南

參考