跳至內容

JWT 解碼與驗證工具

解碼 JWS 或 JWE、驗證簽章、檢查 claim——全程於瀏覽器內處理。

這個工具的用途

JWT Decoder & Verifier 可在你的瀏覽器中開啟任何 JWS(3 段式)或 JWE(5 段式)緊湊型 token——不會上傳、不會聯網。標頭與 payload 會即時顯示,並依據 JOSE RFC 對每個 claim 提供說明;警告引擎會偵測 alg: none、過期 token、過弱的 HMAC 金鑰,以及其他文件中列出的常見地雷;驗證支援 HMAC、RSA、EC 與 EdDSA 簽章,並可使用對應的私鑰對 JWE 解密。

使用步驟

貼上 token 或挑選範例,標頭與 payload 會立即顯示。若要驗證簽章,將金鑰貼入 驗證面板——PEM、JWK 或原始 HMAC 都會自動辨識。

輸入: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

輸出: {"alg":"HS256","typ":"JWT"} · {"sub":"1234567890"} · 簽名有效(使用內建的 HS256 範例金鑰)。

限制與邊界情況

  • Token 不會離開你的瀏覽器;所有運算都透過 WebCrypto 在本地執行。
  • Token 大小上限:100 KB。超過此大小會被拒絕。
  • 不會自動抓取 JWKS——請直接貼上 JWK。kid 不符會以警告呈現。
  • alg=none 可以解碼,但永遠不會被視為已驗證(RFC 8725 §3.1)。
  • 支援的 JWS:HS256/384/512、RS256/384/512、ES256/384/512、PS256/384/512、EdDSA。JWE alg:RSA-OAEP、RSA-OAEP-256、A128/192/256KW、A128/192/256GCMKW、ECDH-ES、 ECDH-ES+A128/192/256KW、dir。JWE enc:A128/192/256GCM、A128CBC-HS256、A192CBC-HS384、 A256CBC-HS512。
  • exp/nbf/iat 的時鐘偏差容忍度:5 秒。

常見問題

我的 JWT 會被傳送到伺服器嗎?
不會——所有運算都透過 WebCrypto API 在你的瀏覽器內完成。路由 loader 只會回傳頁面語系。
為什麼 alg=none 會被拒絕?
因為信任 alg=none 已造成過真實的攻擊事件(Auth0 在 2015 年的案例以及之後許多案例)。RFC 8725 §3.1 明確規定實作必須拒絕它。
支援哪些金鑰格式?
PEM(PKCS#8 / SPKI)、JWK,以及原始 HMAC 密鑰(UTF-8 字串 / hex / base64)。格式會自動辨識,並在輸入旁顯示判斷到的類型。
可以對 JWKS 端點驗證嗎?
v1 還不支援——請直接貼上 JWK。自動抓取意味著一個承諾「僅在本地運算」的工具會主動連網;之後可能會在明確的開關後加入此功能。
過期的 token 會怎麼處理?
仍可正常解碼與驗證;黃色警告會註明過期的時間差。簽章在密碼學上依然有效——警告針對的是「新鮮度」,不是有效性。
JWS 與 JWE 有什麼差別?
JWS 證明誰簽的(3 段以點分隔、payload 為明文)。JWE 保護內容是什麼(5 段、payload 為密文)。JWS = 完整性;JWE = 機密性。
為什麼會對 CBC-HS 模式發出警告?
已驗證的 AES-GCM 會在解密過程中偵測竄改。CBC-HMAC 要正確實作需要更多細節處理,過去也曾在 JOSE 函式庫中造成實際的 bug。
可以在這裡產生 JWT 嗎?
v1 還不支援——本工具僅提供解碼與驗證。產生器模式已在 roadmap 上。