跳到主要內容

JWT 解碼器

解讀 JWT 的 Header 與 Payload,檢視 claims 與到期時間。

線上 JWT 解碼器

JWT(JSON Web Token)由三段以點號分隔的 Base64URL 組成:Header、Payload、Signature。這個JWT 解碼器把前兩段解成可讀的 JSON,讓你檢視 claims(如 sub、iss、exp),並把 exp 換算成可讀時間,方便除錯登入問題。全程本機解碼。

如何使用

  1. 把完整的 JWT 貼進輸入框。
  2. 下方即時顯示解碼後的 Header 與 Payload。
  3. 檢查 exp 是否過期、claims 是否正確。

重要提醒

  • 本工具只「解碼」不「驗證簽章」;驗證需要密鑰,不該放上線上工具。
  • Payload 可被任何人解讀,勿放機密。
  • Token 形同密碼,分享時請小心。

解碼只是讀內容,不等於驗證簽章

除錯登入問題時,最順手的做法就是把 JWT 貼進來,直接看它的 claims、發行者,以及 exp 過期時間——很多「明明帳密沒錯卻一直被登出」的狀況,其實是 token 早就過期了。但有兩個關鍵觀念要記牢:第一,解碼不等於驗證,這裡只是把內容讀出來,並沒有檢查簽章是否有效,能解開不代表這個 token 可信。第二,JWT 的 payload 並沒有加密,只是 Base64 編碼,任何拿到 token 的人都能讀,所以千萬別把密碼、金鑰或任何機密塞進 payload 裡。

不給密鑰為什麼也解得開?

因為 JWT 沒有被加密。我們把規格書裡的示範 token 貼進這一頁、不提供任何密鑰,標頭回傳 { "alg": "HS256", "typ": "JWT" },內容回傳 { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }。沒有任何東西被解密,因為本來就沒有東西被加密 —— 前兩段是 Base64url 文字,而簽章保護的是它們不被**修改**,不是不被**閱讀**。所以 JWT 絕對不該裝任何你不願意放進網址的東西;而完整的 token 貼進 bug 回報,等於在它過期之前交出一份可用的憑證。

解碼一個 token,不等於驗證它

這一頁做的事
用點號把 token 切開,再把 header 與 payload 做 Base64url 解碼
這一頁不做的事
驗證簽章 —— 那需要簽發方的密鑰或公鑰
會被送出去嗎
不會:token 在你的瀏覽器裡解碼,不會離開

JWT 的 payload 是編碼,不是加密。任何拿到這個 token 的人都能讀到裡面每一項聲明——包括半路攔截到它的人——所以 JWT 絕對不是放「機密」的地方。而且一個能乾淨解碼出來的 token 仍然可能是偽造的:只有在伺服器端驗證簽章,才能證明它真的來自簽發方。這一頁用來「看清楚 token 裡裝了什麼」,絕不能用來決定要不要信任它。

沒有密鑰也解得開

JWT 官方文件的示範 token。

輸入
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
輸出
header
{
"alg": "HS256",
"typ": "JWT"
}

payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

完全沒有提供密鑰,兩個部分卻都讀得出來。這是關於 JWT 最重要的一件事:那些聲明是明文傳輸的。簽章證明的是「沒有被改過」,不是「藏起來了」。

常見問題

這個工具會驗證簽章嗎?
不會。它只解碼(Base64URL)並顯示 Header 與 Payload 內容,不驗證簽章 —— 驗證需要你的密鑰,不該貼到任何線上工具。
貼上的 Token 安全嗎?
安全。解碼完全在你的瀏覽器本機進行,Token 不會送到任何伺服器。即便如此,正式環境的有效 Token 仍建議謹慎處理。
JWT 是加密的嗎?
不是。JWT 的 Header 與 Payload 只是 Base64URL 編碼,任何人都能解讀,所以別把機密資料放進 Payload。

延伸閱讀

JWT 是什麼?JSON Web Token 如何運作(以及如何解讀) →

嵌入此工具

把這個工具免費放進你的網站或部落格 —— 複製下面的程式碼貼上即可(內含一條回到本站的連結)。