跳到主要內容

JWT 解碼與簽章驗證

解碼 JSON Web Token 的標頭與宣告,檢查是否過期並驗證簽章;Token 不會離開你的瀏覽器。

在這個分頁中解碼與驗證,權杖和金鑰不會傳送到任何地方。

貼上權杖後,標頭、聲明和到期時間會顯示在這裡。
在瀏覽器中執行・不需上傳運作方式

JWT 解碼器 使用方法

  1. 1

    貼上權杖

    貼上來自 Authorization 標頭、Cookie 或應用程式儲存空間的 JWT;開頭的「Bearer 」會自動忽略。

  2. 2

    查看聲明

    檢視標頭與酬載表格、易讀的 exp、iat、nbf 時間,以及到期狀態橫幅。

  3. 3

    加入金鑰

    輸入 HMAC 密鑰,或貼上 PEM、憑證、JWK 或 JWKS 格式的公開金鑰。

  4. 4

    驗證簽章

    按下「驗證簽章」,確認權杖確實由該金鑰簽署,且內容未被更動。

限制與 Pro

免費使用,不需註冊,權杖數量也沒有限制;驗證支援 13 種演算法(256、384、512 位元的 HS、RS、PS、ES,以及 EdDSA)。

Pro 方案可移除廣告;解碼與驗證功能在所有方案中都相同。 查看 Pro

關於 JWT 解碼器

JSON Web Token(JWT)由三段以點號相連的 Base64URL 字串組成:標明簽章演算法的標頭、存放聲明的酬載,以及簽章。貼上 JWT 即可(有沒有「Bearer 」前綴都行),解碼器會以易讀的表格或排版後的 JSON 顯示標頭與酬載,用不同顏色標出三個部分,並說明 iss、sub、aud、kid、scope 等標準欄位。

時間類聲明會自動轉換:exp、iat、nbf、auth_time 會顯示為你所在時區的日期、UTC 時間,以及相對時間(例如「2 小時後到期」「3 天前已過期」)。頁面上的橫幅會讓你一眼看出權杖是已過期、尚未生效或無到期時間,若 exp 看起來是毫秒而非秒,也會提醒你。

光是解碼無法證明權杖由誰簽發,因此驗證功能會用瀏覽器內建的 WebCrypto 檢查簽章。HS256、HS384、HS512 需要共用密鑰(純文字或 Base64)。256、384、512 位元的 RS、PS、ES 演算法,以及 Ed25519 的 EdDSA,則需要公開金鑰,可貼上 PEM 公開金鑰、RSA PUBLIC KEY 區塊、X.509 憑證、單一 JWK 或完整 JWKS,並依權杖的 kid 挑選金鑰。

本工具無法解密 JWE 權杖(五段式),也不會擷取 JWKS 網址;請自行開啟簽發者的 jwks_uri,再貼上其中的 JSON。

隱私

權杖等同持有者憑證,所以本頁也這樣處理:解碼與簽章驗證都是在你的瀏覽器中用 WebCrypto 執行,權杖、密鑰與金鑰不會傳送到伺服器,也不會被記錄或儲存。關閉或重新整理分頁後,所有內容都會清除。

功能

易讀的時間

exp、iat、nbf 會顯示為你所在時區的時間、UTC 時間,以及「2 小時後」或「3 天前」這類相對時間。

真正的簽章驗證

以 WebCrypto 對照你的金鑰或 JWKS,驗證 HMAC、RSA、RSA-PSS、ECDSA 與 Ed25519 簽章。

權杖留在本機

不會上傳任何內容,可以放心檢查正式環境的權杖。

JWT 解碼器:常見問題

在這裡貼上正式環境的權杖安全嗎?
權杖是由你分頁中的 JavaScript 解碼與驗證,不會發出含有權杖的請求,你可以在瀏覽器的網路面板中確認。不過有效的權杖在過期前就像密碼,請避免貼到不信任的網站;分享截圖時,也建議使用已過期或測試用的權杖。
為什麼光是解碼不能證明什麼?
任何人都能自行建立標頭與酬載並以 Base64URL 編碼,解碼只是把它還原。只有簽章能把權杖與簽發者連結起來。相信任何聲明之前,請先用簽發者的公開金鑰或共用密鑰驗證,並確認 alg 是伺服器預期的演算法,因為接受「none」或被替換的演算法是典型的漏洞。
要驗證 RS256 或 ES256 權杖,公開金鑰要去哪裡找?
身分提供者通常會以 JWK Set 公開金鑰。先查看簽發者的 /.well-known/openid-configuration,開啟其中列出的 jwks_uri,再把該 JSON 貼到這裡,工具會使用 kid 與權杖標頭相符的金鑰。你也可以直接貼上 PEM 公開金鑰或簽發者的 X.509 憑證。
exp、iat 和 nbf 代表什麼?
它們是 NumericDate 聲明,以自 UTC 1970 年 1 月 1 日起算的秒數表示。exp 是權杖失效的時間,iat 是簽發時間,nbf 則是最早可被接受的時間。伺服器通常會容許一兩分鐘的時鐘誤差。解碼器會把每個欄位顯示為本地日期、UTC 時間戳記與相對時間。
HMAC 密鑰明明正確,為什麼驗證還是失敗?
常見原因有:複製密鑰時夾帶了空白字元、簽署權杖時密鑰是經過 Base64 編碼的,或是權杖被某個工具重新編碼,導致標頭或酬載的位元組改變。可以試試「密鑰經過 Base64 編碼」開關。前兩段只要有任何更動,即使只是 JSON 鍵的順序不同,簽章也會失效。