JWT Decoder

JWT Decoder / Encoder

把任何 JSON Web Token 解碼,看到 header、payload、簽名 — 或用 HS256/384/512 簽出新的 token。本機 HMAC 驗證,100% 在你的瀏覽器執行。

JWT Decoder / Encoder — TL;DR

把任何 JSON Web Token 解碼,看到 header、payload、簽名 — 或用 HS256/384/512 簽出新的 token。本機 HMAC 驗證,100% 在你的瀏覽器執行。

不會。整個工具就是這個頁面裡的 JavaScript。貼上 token,解碼在你的瀏覽器中完成,bytes 不會離開分頁。可開 DevTools → Network 觀察,decode 與 verify 期間完全沒有任何請求。所以可以安全地貼上正式環境或客戶的 token。

它證明 token 是「持有密鑰 (HMAC) 或私鑰 (RSA/ECDSA) 的人」簽出來的。它不會加密 payload — header 和 payload 只是 base64url 編碼的 JSON,任何拿到 token 的人都能讀。簽名只防止竄改:payload 改一個字元,簽名就對不上。

JWT 通常含使用者 ID、email、scope、有時候等同 session cookie 的東西 — 這些絕對不該貼到陌生人的伺服器。iKit Decoder 是這個頁面裡早就載完的 JavaScript。可開 DevTools → Network 親眼驗證:decode 與 verify 期間沒有 fetch、沒有 XHR、沒有 beacon。

Header

Payload

簽名

標準 Claims


            

驗證 HMAC 簽名

對於 HS256/384/512 token,輸入簽名密鑰即可在本機驗證。RS256/ES256 (RSA/ECDSA) 需要伺服器端 library — 公鑰驗證需要 PEM 檔,本工具暫不支援。

為什麼選擇 iKit JWT Decoder

Debug JWT 最快的方式 — 不上傳、不註冊、你和 token 之間沒有第三方。

三段一次到位

貼上 JWT 後,header、payload、簽名同時並列顯示。標準 claims (iss、sub、aud、exp、iat) 自動解析時間戳並標記。

本機 HMAC 驗證

對 HS256/384/512 的 token,輸入密鑰即可用瀏覽器原生 Web Crypto API 驗證,密鑰絕對不離開你的瀏覽器分頁。

簽出自己的 token

切到 Encode 模式,以 JSON 編輯 header、payload,選演算法、輸入密鑰,立即取得已簽名 token。

注重隱私

JWT payload 通常含使用者 ID、email、權限 — 絕對不該貼到陌生伺服器工具。iKit Decoder 是這個頁面裡的 JavaScript,DevTools → Network 可驗證。

過期狀態一目了然

exp、nbf、iat 等標準 claim 會以人類可讀的時間顯示,並有清楚的「已過期 / 尚有效」標籤,一眼判斷 token 是否還能用。

開放標準、開放程式碼

用瀏覽器原生 Web Crypto API + JSON parser — 演算法跟 OpenSSL、libjwt、jose 完全一樣,行為與所有現代 JWT library 一致。

JWT 解碼實際是怎麼運作的

JWT 就是三段以點分隔的 base64url-encoded JSON,沒別的。

  1. 1

    用點分隔成三段

    JWT 長得像 aaa.bbb.ccc。我們用兩個點切成三段:編碼後的 header、payload、簽名。如果切不出三段就是格式錯誤。

  2. 2

    對每段做 base64url 解碼

    Header 和 payload 是 base64url 編碼的 UTF-8 JSON。Base64URL = Base64 但用 -_ 取代 +/,且省略 padding。我們先把字元換回去再 atob,然後 JSON.parse。

  3. 3

    結構化呈現

    Header 告訴我們演算法 (alg:HS256、RS256 等) 和類型。Payload 含 claims — 標準的 (isssubaudexpiatnbfjti) 加上任何自訂欄位。每一項都有對應區塊顯示。

  4. 4

    驗證 (僅 HMAC)

    對 HS256/384/512,我們用你輸入的密鑰重新計算 header.payload 的 HMAC,跟第三段簽名比對。等同 HMAC(SHA-256, secret, signing_input) 後 base64url 編碼。一致 = 簽名有效。

常見 JWT debug 場景

你會用 JWT decoder 的真實情境。

檢查 auth provider 給的 token

Auth0、Firebase、Keycloak、AWS Cognito 登入後都會回傳 JWT。把 access_token 貼進來看看你的 app 實際拿到什麼 claims — 使用者 ID、scope、什麼時候過期。

Debug 401 Unauthorized

API 拒絕你的請求?解碼 token 確認:是否過期 (exp 在過去)?audience claim (aud) 是否符合 API 預期?issuer (iss) 是不是正確的 tenant?

驗證 webhook 簽名

Stripe、GitHub Apps、Slack 送來的 webhook payload 是 JWT 形式簽過的。收到後貼進 Decode 模式 + 共享密鑰,確認請求真的來自他們。

產生測試用 token

整合測試需要一個全新簽名 JWT?切到 Encode 模式,編 payload (自訂 user ID、自訂 expiry)、選 HS256 + 你的測試密鑰,毫秒內拿到 token。不需要連後端。

為什麼本機 JWT 解碼很重要

JWT 通常含使用者 ID、email、scope、有時候等同 session cookie 的東西 — 這些絕對不該貼到陌生人的伺服器。iKit Decoder 是這個頁面裡早就載完的 JavaScript。可開 DevTools → Network 親眼驗證:decode 與 verify 期間沒有 fetch、沒有 XHR、沒有 beacon。

  • Decode / verify 期間零網路請求 — 可在 DevTools 驗證。
  • 你輸入的驗證密鑰只留在瀏覽器記憶體,清除/重整即消失。
  • 可安全用於正式 token、客戶 access token、webhook secret。

相關教學

來自 iKit 部落格的深入教學與工具比較。

常見問題

這安全嗎?我的 JWT 會被上傳嗎?

不會。整個工具就是這個頁面裡的 JavaScript。貼上 token,解碼在你的瀏覽器中完成,bytes 不會離開分頁。可開 DevTools → Network 觀察,decode 與 verify 期間完全沒有任何請求。所以可以安全地貼上正式環境或客戶的 token。

JWT 簽名實際上在驗證什麼?

它證明 token 是「持有密鑰 (HMAC) 或私鑰 (RSA/ECDSA) 的人」簽出來的。它不會加密 payload — header 和 payload 只是 base64url 編碼的 JSON,任何拿到 token 的人都能讀。簽名只防止竄改:payload 改一個字元,簽名就對不上。

為什麼解碼正常但驗證失敗?

三個常見原因:(1) 密鑰錯了 — JWT 密鑰大小寫敏感,任何空白差異都會失敗。(2) 演算法不一致 — header 寫 HS256 但原本是用 HS512 簽的。(3) Token 簽完之後被改過 — 改一個 byte 簽名就壞。請確認 header.alg 與你預期的一致。

RS256、ES256 等公鑰演算法支援嗎?

目前只支援 HMAC 系列 (HS256/384/512) 的驗證。RS256、ES256 用公鑰加密 — 驗證需要 issuer 的 PEM 公鑰檔,UI 較複雜。Decode 仍然可以(header / payload / signature 三段都正確顯示),但 Verify 會告訴你不支援。RSA/ECDSA 驗證在計畫中。

跟 jwt.io 有什麼不同?

概念一樣,預設不同。iKit Decoder 完全在你的瀏覽器執行 (jwt.io 也是,但 iKit 的程式碼可 view-source、域名沒有任何第三方追蹤器)。我們對 exp claim 加了清楚的「已過期 / 尚有效」標籤、結構化的 claims 註記 (iat / nbf / iss / sub / aud / jti 變成可讀資訊行)、以及一鍵複製完整解碼結果(可貼到 bug 回報)。