收藏

開發者工具

InoTools Blog
類別:教學

什麼是 JWT?理解 JSON Web Token 的結構與用法

JWT 被廣泛用於 Web 應用程式和 API 的身份驗證。讓我們了解其運作方式,並學習如何安全地使用它。

什麼是 JWT?

JWT(JSON Web Token)是一種開放標準(RFC 7519),用於在各方之間以緊湊、帶有數位簽章的 JSON 令牌安全地傳輸資訊。

JWT 主要用於以下場景:

  • 身份驗證(Authentication) — 使用者登入後,伺服器發行 JWT,後續請求使用令牌進行驗證
  • 資訊交換(Information Exchange) — 由於簽章可以偵測篡改,因此可以進行可信賴的資料交換
  • 授權(Authorization) — 將使用者的權限資訊嵌入令牌中,用於存取控制

JWT 的結構

JWT 由以點(.)分隔的三個部分組成:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. 標頭(Header)

指定簽章演算法和令牌類型。

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

2. 載荷(Payload)

包含使用者資訊和中繼資料(聲明)。

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622
}

標準聲明包括:

  • sub — 主體(Subject)
  • iat — 簽發時間(Issued At)
  • exp — 到期時間(Expiration Time)
  • iss — 簽發者(Issuer)
  • aud — 接收者(Audience)

3. 簽章(Signature)

將標頭和載荷組合後,使用金鑰進行簽章。用於篡改偵測

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

為什麼需要 JWT?

傳統的基於工作階段(Session)的身份驗證需要伺服器端維護工作階段資料。使用 JWT 可以解決以下問題:

  • 可擴展性問題 — 不需要工作階段存儲,使伺服器水平擴展更容易
  • 微服務間的身份驗證 — 每個服務可以獨立驗證令牌
  • 行動應用程式整合 — 不依賴 Cookie 的身份驗證方式

JWT 的優勢

  • 無狀態身份驗證 — 不需要伺服器端管理工作階段,每個請求只需驗證令牌
  • 跨網域支援 — 透過 Authorization 標頭傳送,避開 CORS 限制
  • 緊湊 — 體積小,適合放入 URL 和 HTTP 標頭,網路開銷小
  • 自包含 — 令牌本身包含使用者資訊,減少資料庫查詢

如何解析 JWT

JWT 的解析可以使用 本站的「JWT Encoder / Decoder」輕鬆完成。所有處理都在瀏覽器內完成,令牌不會被傳送到任何外部伺服器。無需註冊、完全免費。

立即使用 JWT 解碼器

工具使用方法

  1. 開啟 JWT Encoder / Decoder
  2. 將 JWT 令牌貼到輸入欄位
  3. 標頭、載荷和簽章會自動解碼,並以格式化的 JSON 顯示
  4. exp 聲明確認到期時間
  5. 根據需要驗證簽章

常見問題

Q. JWT 是加密的嗎?

A. 標準的 JWT(JWS)是已簽章但未加密的。任何人都可以透過 Base64URL 解碼讀取載荷。請勿將機密資料放入載荷。如需加密,請使用 JWE(JSON Web Encryption)。

Q. 如何確認 JWT 的到期時間?

A. 檢查載荷中的 exp(Expiration Time)聲明。值為 Unix 時間戳格式(紀元秒)。可以使用 本站的 Unix 時間戳轉換工具將其轉換為可讀的日期時間。

Q. JWT 令牌可以被篡改嗎?

A. 載荷內容可以被修改,但如果不知道正確的金鑰,就無法產生有效的簽章。伺服器端透過驗證簽章來偵測篡改。

相關術語

  • JWT(JSON Web Token) — 緊湊且自包含的令牌格式。在 RFC 7519 中標準化
  • JWS(JSON Web Signature) — 帶簽章的 JWT。最常見的格式
  • JWE(JSON Web Encryption) — 加密的 JWT。保護載荷的機密性
  • 聲明(Claims) — 令牌中包含的資訊(使用者 ID、權限、到期時間等)
  • 簽章(Signature) — 偵測令牌資料篡改的機制
  • Base64URL — URL 安全的 Base64 編碼。用於 JWT 各部分的編碼