雜湊、ID與隨機數
查看 JWT 內容與到期時間,能知道什麼?
使用工具
API 回傳 401 時容易懷疑過期,但 JWT 內寫著未來時間,並不能證明伺服器判斷錯誤。期限只是條件之一,簽章、簽發者與接收方也需要驗證。這裡用虛構權杖理解時間,不需要把真實認證資訊貼進範例或詢問內容。
兩個點分隔的三個部分
將下列字串輸入 JWT 解碼。兩個點分出 Header、Payload、Signature。這是 alg 為 none、簽章為空的示範,不能用於登入。工具讀取 Base64url 編碼的 JSON,但能解析不代表可信。
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJkZW1vLXVzZXIiLCJpYXQiOjE3MDQwNjcyMDAsIm5iZiI6MTcwNDA2NzIwMCwiZXhwIjoxNzA0MDcwODAwfQ.真實 JWT 可能含使用者識別和權限。Base64url 不是加密,因此有簽章也能讀 Payload。讀取內容與修改後仍通過認證是不同能力;簽章驗證與後者有關,而本解碼頁面不執行驗證。
exp、nbf、iat 分別是什麼時間
範例的 iat 和 nbf 是 1704067200,即 UTC 2024-01-01 00:00:00;exp 是 1704070800,即一小時後。iat 表示簽發,nbf 表示不得早於的界限,exp 表示到期。有簽發時間不代表所有權杖都有效一小時,這只是範例設定。
iat = nbf = 2024-01-01T00:00:00Z
exp = 2024-01-01T01:00:00ZJWT NumericDate 以 Unix 秒為基礎,直接將 Date.now() 的毫秒填入 exp 會改變含義。應確認產生端單位,再明確按秒轉換,而非只憑位數修正。日期字串不等於數值 Claim,本頁面只對數值 Claim 做時間解析。
裝置時鐘與驗證伺服器不同
工具以裝置目前時間提供過去或未來的參考,等於 exp 時歸入已到期一側。但它不知道伺服器時鐘、允許偏差或認證函式庫設定。裝置慢時,頁面顯示未來也可能已經超過伺服器期限。
本地還是今天並不足以判斷期限:UTC 01:00 與日本時間 10:00 是同一瞬間,換顯示時區不會延長有效期。報告時附 UTC 或偏移,並區分瀏覽器觀察與伺服器日誌;本工具不會查詢伺服器時鐘。
修改期限並不能修復認證
修改 exp 後重新編碼,可以讓解碼器顯示未來,但簽章 JWT 的被簽內容變了,原簽章就不再匹配。認證需要正確驗證,解碼成功和日期在未來都不等於認證成功,未驗證提示正是為了區分兩者。
顯示 iss、aud 並不證明真實簽發者或目前 API 就是接收方,alg 也只是輸入資料而非可信設定。工具不取得外部金鑰或聯絡認證伺服器,下一步應檢查驗證端設定和日誌,並盡量只分享必要識別與時間,不分享完整憑證。
讀不出來時不要強改成 JWT
此頁面處理三部分 JWT,不解密五部分 JWE,也不支援服務自訂的不透明權杖。刪分隔符或不斷刪字元直到不報錯,就不再是在檢查原資訊。先檢查複製範圍、引號及 Authorization 的 Bearer 前綴,僅使用權杖本體。
最後記錄 exp 的 UTC 時間、與裝置時鐘的關係,以及本頁面未驗證簽章。缺少 Claim 時不要編造期限。即使不自動儲存,螢幕共用、截圖和剪貼簿仍可能洩漏憑證;先用虛構例子練習,真實資料按組織規則處理。
Payload 寫 admin 不等於已確認管理員
Payload 的 role、userId 看似權威,但畫面只是讀取聲明,不確認發行者、受眾、簽章或目前權限。exp 在未來也不能替代這些檢查。解碼值可作除錯線索,不能作為放行依據。
先確認失敗請求實際用了哪個權杖。貼另一畫面取得的未來 exp 權杖,不能否定失敗請求過期。應統一權杖和用戶端、伺服器時刻。檢查真實憑證時也注意共享畫面和剪貼簿暴露,公開問題報告用去識別範例。
結論應限於此裝置看來 exp 已過、nbf 尚未到、無法解析三段等事實。不要稱有效 JWT,以免暗示已驗證。修改時間使 Payload 可讀,不是修復原簽章權杖,也不證明驗證會接受。