RevealTheme logo

JWT 解碼器

即時解碼 JSON Web Token(JWT)。完全在你的瀏覽器中執行:權杖絕不會離開你的裝置,因此可安全用於正式環境的密鑰。

如何使用本工具

  1. 1

    將你的 JWT 貼到輸入框中。

  2. 2

    點選「解碼」。標頭和酬載會被解析並顯示出來。

  3. 3

    查看演算法、宣告(claims)、過期時間和簽發者。

什麼是 JWT,它是如何運作的?

JSON Web Token(JWT,在 RFC 7519 中定義)是一種精簡且 URL 安全的方式,用於表示關於使用者的一組宣告(claims),並附帶這些宣告未被竄改的加密證明。JWT 為大多數現代 Web 技術堆疊提供身分驗證支援:當你登入時,伺服器會建立一個包含你的使用者 ID 和權限的 JWT,用一個密鑰對其簽名,然後回傳給你。你的瀏覽器會儲存該權杖(通常存放在 localStorage 或 Cookie 中),並在之後每個請求的 Authorization 標頭中攜帶它。伺服器在每個請求中都會驗證簽名:如果有效,就信任權杖中的宣告;如果被竄改,簽名就會失效,請求隨即被拒絕。JWT 由三部分組成,均採用 Base64URL 編碼並以點分隔:標頭宣告簽名演算法(HS256 表示 HMAC-SHA256,RS256 表示 RSA,ES256 表示 ECDSA,none 表示未簽名權杖——這很危險,你應當拒絕它們);酬載(payload)包含實際的宣告(標準宣告如「sub」表示主體、「exp」表示過期時間、「iat」表示簽發時間,外加你的應用程式所定義的任意自訂宣告);簽名則是標頭和酬載由持有密鑰者簽名的證明。本解碼器會揭示前兩部分,它們屬於公開資訊;簽名只能用密鑰來驗證,這正是為什麼每一個 JWT 解碼器都會在不經驗證的情況下顯示宣告。

常見使用場景

  • 透過解碼用戶端傳送的 JWT 來偵錯身分驗證問題:準確查看它包含哪些宣告、由誰簽發以及何時過期。

  • 檢查來自 API 閘道(AWS Cognito、Auth0、Okta)的 JWT,以理解下游服務的宣告結構。

  • 驗證自訂宣告(組織 ID、角色、功能旗標)是否在權杖簽發程式碼中被正確設定。

  • 對比續期前後的權杖,確認過期時間已被延長。

  • 稽核權杖的演算法:確認在正式環境中使用的是 RS256 或 ES256,絕不使用「none」。

  • 將伺服器日誌中的 base64url 酬載轉換為可讀的宣告。

常見問題

用於正式環境的 JWT 是否安全?
安全。解碼完全透過本機 JavaScript 在你的瀏覽器中進行:權杖絕不會抵達我們的伺服器,也不會出現在任何日誌中。你可以在解碼時開啟開發者工具→「網路」標籤來驗證這一點:不會觸發任何外發請求。話雖如此,請把 JWT 當作憑證對待:無論解碼器在哪裡執行,都不要將它們貼到 URL、螢幕截圖或共享文件中。
這個工具會驗證簽名嗎?
不會。驗證簽名需要密鑰(對於 HS256)或公鑰(對於 RS256/ES256/PS256)。那些要求你提供密鑰來驗證 JWT 的網頁工具是一個安全警訊:那樣你就把簽名密鑰傳送給了一個陌生人。請在伺服器端,或使用你自己掌控的函式庫(jose、jsonwebtoken)來驗證簽名。
如果我的 JWT 已經過期了會怎樣?
過期不會妨礙解碼:「exp」宣告只是酬載中的一項資料。在解碼後的酬載中尋找「exp」:它是一個 Unix 時間戳記(自 1970 年以來的秒數)。用我們的時間戳記轉換器將其轉換,即可在你的時區中查看過期時間。如果「exp」已過去,任何合規的驗證器都會拒絕該權杖,儘管解碼器仍然能夠讀取它。
JWT 可以被加密嗎?
可以:那叫做 JWE(JSON Web Encryption,RFC 7516)。本工具處理的是 JWS(JSON Web Signature,常見情形),其中酬載經過簽名但可見。JWE 權杖由 5 個以點分隔的部分組成,而非 3 個,並且需要接收方的私鑰才能解密。如果你的權杖有 5 個部分,你需要一個支援 JWE 的工具。
「alg」:「none」是什麼意思,它危險嗎?
「none」意味著沒有簽名:權杖未經簽名,任何人都可以偽造任意宣告。正式系統必須明確拒絕帶有「alg: none」的權杖。某些函式庫預設接受它們(一類廣為人知的 CVE 漏洞)。請始終只允許你的應用程式所預期的演算法。
為什麼要用 JWT 而不是工作階段 Cookie?
JWT 是無狀態的:伺服器無需查詢工作階段;權杖本身就包含了使用者的身分和權限。這使得 JWT 非常適合分散式系統和 API。工作階段 Cookie 是有狀態的(需要伺服器端的工作階段儲存),但更容易失效(只需刪除工作階段即可)。其中的取捨在於:JWT 擴充性更好,但在權杖過期之前你無法「將某個使用者登出」。
JWT 的標準宣告有哪些?
RFC 7519 定義了:iss(簽發者)、sub(主體,通常是使用者 ID)、aud(受眾)、exp(過期時間)、nbf(不早於)、iat(簽發時間)、jti(JWT 的 ID)。除這些之外,應用程式還會加入自訂宣告,如「roles」、「permissions」或「tenant_id」。請讓自訂宣告保持精簡:JWT 會在每個請求的標頭中傳輸,會增加你的頻寬消耗。

相關工具