這個工具的用途
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 上。