Ad
DevToolXDevToolX

JWT 解碼

解碼 JWT Token,查看 Header 和 Payload

關於 JWT 解碼

JSON Web Token 由三段 Base64url 編碼的部分組成——header、payload、signature——以句點連接。header 指定簽名演算法;payload 帶有 claims(使用者身分、到期時間、權限等);signature 證明 token 由可信的一方發行。這個工具解碼前兩段讓你查看內容。注意:本工具不驗證簽名,簽名驗證必須在你的應用程式程式碼中使用正確的 secret 或公鑰進行。

常見使用情境

Debug API 時快速查看 token 內容
把失敗請求裡的 token 貼進來,不需要寫解碼程式就能立即讀取其中的 claims。
確認 exp 和 iat 時間戳
讀取解碼後的 Unix 時間戳,確認 token 的發行時間與到期時間,快速診斷驗證失敗的原因。
檢查自訂 claims
讀取 roles、scopes、tenant ID 等應用程式自訂欄位,確認授權伺服器有帶入預期的資料。
比對前後端看到的 token 是否一致
在前端和後端分別解碼同一個 token,確認雙方讀取的是相同的 claims,而不是不同的或過期的 token。

常見問題

這個工具會驗證 token 的簽名嗎?

不會。本工具只解碼 header 和 payload,不驗證簽名。解碼的 token 只能告訴你 claims 的內容,無法確認 token 是否可信。在信任任何 claim 之前,務必在後端用你的簽名金鑰透過函式庫驗證簽名。

我應該把正式環境的 token 貼到線上工具嗎?

不應該。JWT 可能包含敏感的使用者資料或帶有服務存取權限,應將正式環境的 token 視為機密。Debug 時請使用短效測試 token,或在貼上之前把 signature 段落替換掉。

exp 和 iat 要怎麼解讀?

兩個都是 Unix 時間戳,代表從 1970-01-01T00:00:00Z 起算的秒數。exp 是到期時間,iat 是發行時間。可用時間戳轉換工具換算成可讀的日期,或在 JavaScript 裡用 Date.now()/1000 > exp 來判斷是否已到期。

什麼是 alg:none 攻擊?

早期有些 JWT 函式庫會接受 header 中宣告 alg: none 的 token,並直接跳過簽名驗證,完全信任客戶端傳來的 payload。現代函式庫預設會拒絕 alg:none。這個攻擊手法提醒我們,演算法的選擇必須在後端強制執行,不能讓 token header 自行宣告。

JWT 和 session cookie 有什麼不同?

Session cookie 只儲存一個不透明的 session ID,伺服器要查資料庫才能取得對應的 session 資料。JWT 是自含式的——claims 直接編碼在 token 裡,伺服器驗證後即可讀取,不需要查資料庫。代價是 JWT 在到期前無法被撤銷,除非另外維護一個伺服器端的封鎖清單。

相關工具