什麼是 JSON Web Token?
JSON Web Token(JWT)是一種精簡、可安全用於 URL 的小型宣告酬載封包格式。它是無狀態 Web 工作階段、OAuth/OIDC ID 權杖、機器對機器 API 驗證,以及已簽署魔法連結的標準憑證格式。一個 JWT 始終是由點連接的三個 base64url 片段:header.payload.signature。標頭與酬載是 JSON;簽章則是對前兩個片段所產生的二進位 MAC 或數位簽章。
JWT 是如何運作的?
當這個工具解碼權杖時,它走的是每個 JWT 函式庫都會遵循的相同三步路徑:
- 以點切分權杖,恰好分成三個非空片段。任何其他形狀都是格式錯誤。
- 對片段 0 與 1 進行 base64url 解碼,然後對各自呼叫
JSON.parse。標頭攜帶演算法(alg)與權杖類型(typ)。酬載攜帶宣告(sub、exp、iat與自訂鍵)。 - 若提供了密鑰,則使用標頭中指定的演算法,針對
<segment0>.<segment1>重新計算 MAC,並逐位元組與第三個片段比對。 - 顯示驗證結果以及解碼後的宣告,並依
exp宣告計算出人類可讀的到期指示。
為什麼在瀏覽器中解碼 JWT?
把正在使用中的真實 JWT 貼到遠端偵錯工具中,等於把這個憑證洩漏給該服務的日誌、可觀測性堆疊,以及它資料轉發給的任何合作夥伴。即使第三方網站宣稱不會記錄權杖,你也無從驗證。本工具的設計就是要讓你永遠不必做這種妥協:
- 零網路:執行階段沒有任何
fetch、XMLHttpRequest或sendBeacon呼叫。在解碼與驗證時打開 DevTools——網路面板會保持靜默。 - 原生 Web Crypto:HMAC 驗證使用
crypto.subtle.importKey與crypto.subtle.sign,與你的執行環境會呼叫的原語完全相同。 - 靜態部署:每個頁面都是單一靜態 HTML 檔案,沒有可入侵的伺服器端點。因為沒有伺服器可以洩漏,所以也沒有可洩漏的權杖。
此工具驗證什麼,不驗證什麼?
本工具的第 1 版僅驗證 HMAC-SHA 系列的簽章。具體而言:
- 支援:HS256、HS384、HS512。提供共用密鑰,工具便會重新計算並比對 MAC。
- 尚未支援:RS256/384/512(RSA)、ES256/384/512(ECDSA)、EdDSA 以及 PS256/384/512(RSA-PSS)。這些需要 PEM 或 JWK 形式的公開金鑰,會刻意延後到後續版本實作。
- 拒絕:
alg: "none"。工具仍會解碼權杖,但會明確標示其為不安全——並未進行任何簽章驗證,任何接受這種權杖的正式系統都存在嚴重的漏洞。
JWT 解碼範例是什麼樣子?
將 RFC 7519 中的標準範例權杖貼到上方的輸入欄位:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
標頭解碼為 {"alg":"HS256","typ":"JWT"},酬載則解碼為 {"sub":"1234567890","name":"John Doe","iat":1516239022}。在驗證面板中輸入 your-256-bit-secret,簽章檢查會回傳有效。若更改密鑰中任一字元,則會回傳無效。整個過程沒有任何資料離開你的瀏覽器。
這就是我們在正式環境中需要除錯權杖時,曾希望存在的 JWT 解碼器:尊重隱私、速度快,並建立在與執行階段相同的原語上。