語言:繁體中文

tools / jwt

jwt/

解碼 JWT 的 Header 與 Payload,顯示 exp / iat / nbf 對應的本機時間。只解碼,不驗證簽章。

只解碼,不驗證簽章 —— 解碼成功不代表 token 可信

Token

時間

Header

Payload


        

Signature

原文(base64url),未驗證

      

常見問題

解碼出來的內容可信嗎,這裡會驗證簽章嗎

不會驗證。這個工具只解碼 Header 和 Payload,不驗證簽章,所以解碼成功不代表 token 是真的、沒被改過。驗證簽章要用金鑰或公鑰,應該在後端用 JWT 函式庫完成。另外 Payload 只是 base64url 編碼,不是加密,拿到 token 的人都能解開,不要在裡面放密碼這類敏感資訊。

提示「段數不對」或「這是 JWE」是什麼意思

JWT 由 header.payload.signature 三段用點連接,不是 3 段就會提示段數不對。常見原因是複製不完整、多複製了別的內容,或是貼上的根本不是 JWT,例如 session ID 或不透明的隨機 token。剛好 5 段的是 JWE,內容經過加密,這裡無法解碼。

提示「不是合法的 base64url」或「長度不合法」怎麼辦

代表某一段裡有不屬於 JWT 的字元,或是被截斷了,提示裡會寫出是哪一段,有非法字元時還會指出是哪一個。JWT 用 base64url,只含字母、數字、- 和 _,結尾的 = 可有可無。最常見的是 token 開頭帶著引號;含有 + 或 / 代表用的是一般 Base64,要換成 - 和 _。複製被截斷時,通常會出現「長度不合法」或「不是合法 JSON」。

帶 Bearer 前綴或換行的 token 可以直接貼上嗎

可以。開頭的 Bearer 會自動去掉(不分大小寫),token 裡的空格、換行和 Tab 也會被忽略,所以從請求標頭或紀錄檔裡複製的 token 可以直接貼。輸入超過 1 MB 會直接拒絕,真正的 JWT 一般只有幾百位元組到幾 KB。

狀態顯示「已過期」「尚未生效」「在未來」分別是什麼意思

它們對應 Payload 裡的三個時間欄位。exp 是過期時間,到了就是「已過期」;nbf 是生效時間,還沒到就是「尚未生效」;iat 是簽發時間,比目前時間還晚會標「在未來」,可能是簽發方和你的電腦時鐘對不上。最上面的「狀態」一行先看 nbf,再看 exp,都沒問題才顯示「有效」,這只代表時間上有效,和簽章無關。

顯示的時間和預期差了幾個小時,剩餘時間也不對

頁面依你電腦的時區和時鐘顯示,日期後面會標出時區,例如 UTC+08:00。exp、iat、nbf 本身是 Unix 時間戳記(秒),與時區無關,換時區只是顯示不同。剩餘時間每秒更新,用的是你電腦目前的時間,時鐘不準結果就不準。數值特別大(例如 13 位的毫秒時間戳記)會被提示 JWT 規定為秒,auth_time 這類其他時間欄位不會自動換算。

HS256、RS256、ES256 這些演算法的 token 都能解碼嗎

都可以。解碼只是把前兩段還原成 JSON,和簽章演算法無關。Header 裡的 alg 會顯示在標題旁邊,alg 是 none 時會標註「無簽章」。Signature 那一段只依原文(base64url)顯示,不會解碼。

貼上的 token 會上傳嗎

不會。解碼在瀏覽器裡完成,頁面沒有任何把 token 傳出去的請求。不過 token 常常等同於登入憑證,還在有效期限內的正式環境 token 不要隨手傳給別人,也別貼到不認識的網站。