開發者工具 · JWT 解碼器
JWT exp、iat 和 nbf:NumericDate 是秒,而不是毫秒
· 工作原理
jwt 時間戳 偵錯
JavaScript 給你毫秒,而 JWT 需要秒,所以時間戳記的錯誤是千分之一。這篇文章解釋了 NumericDate 以及如何正確讀取三個時間宣告。
永不過期或在到達之前過期的令牌 - 單位錯誤的兩個症狀
千分之一的錯誤會產生嚴重的症狀。在代幣生產者期望紀元秒的地方提供 JavaScript 毫秒可以將到期時間推遲數千年。再次除以秒值可以將其放置在 1970 附近,使新頒發的令牌在其第一個合法請求之前看起來已過期。
解碼器透過在 ISO 讀數旁邊顯示數字聲明來幫助揭示比例。此顯示僅用於診斷。攻擊者可以將任何 `exp`、`iat` 或 `nbf` 數字寫入未簽署或偽造的有效負載中,因此轉換後的時脈時間只有在其他地方進行簽名和策略驗證後才具有權威性。
NumericDate 7519 — 自 Unix 紀元以來的秒數,作為 JSON 數字,允許使用分數,但很少使用
JWT 時間宣告使用 NumericDate 表示形式:一個 JSON 數字,從 Unix 紀元開始計算秒數。小數可以表示亞秒位置,因為實作在建構日期之前將該值乘以 1,000。它不會先將有效的有限數捨入為整數。
ToolAcre 將 `exp`、`nbf`、`iat`、`auth_time` 和 `updated_at` 識別為用於顯示的時間形狀欄位。只有前三個屬於其註冊權利要求描述。非數字、無限或無效的日期結果將被忽略,而不是呈現為有意義的時間,從而防止諸如“soon”之類的字串偽裝成時間戳。
Date.now() 是毫秒-JavaScript 習慣會產生遠期到期的情況
`Date.now()` 傳回毫秒,而 NumericDate 值以秒錶示。因此,從瀏覽器時鐘匯出宣告的生產者需要進行明確的比例轉換,通常在應用自己的捨入策略之前除以 1,000 。 ToolAcre 讀取路徑執行逆乘法僅用於顯示。
保持單位轉換在代碼審查中可見。 `exp` 中的 13 位數字是一個有用的警告標誌,但數字計數不是驗證,不能取代生產者的合約。解碼器將嘗試呈現 JavaScript Date 可以表示的任何有限數字宣告;它不會默默地將毫秒重新解釋為秒。
exp、nbf 和 iat — 過期、不早於和發佈於,以及驗證者如何應用它們
`exp` 指定驗證者不應再根據其策略接受令牌的時間。 `nbf` 指定一個邊界,在該邊界之前不應接受該邊界。 `iat`記錄發佈時間。 ToolAcre 標記這些意義,並僅將 `exp` 和 `nbf` 與提供的參考時鐘進行比較。
當解碼的到期時間早於現在時,傳回的狀態為 `expired`;當不早於現在時,傳回的狀態為 `future`;對於其他顯示的時間宣告,傳回的狀態為 `past`。這些標籤是關於有效負載算術的觀察。它們不是身分驗證決策,也不評估發行者、受眾、金鑰或簽名。
時脈差異和空間屬於驗證者;此解碼器既不定義
摘要詢問了多少時脈偏差是合理的,但 JWT 解碼器配置和實作都沒有定義迴旋餘地。該號碼屬於驗證者及其部署要求。在這裡發明預設值會將檢查文章變成未記錄的安全策略,因此本節故意不提供任何內容。
如果服務拒絕邊界附近的令牌,請使用可信任日誌比較服務時脈、頒發者時脈和設定的驗證者策略。 ToolAcre 解決針對瀏覽器目前日期的索賠,沒有容差視窗。因此,即使兩者解析相同的數字,其結果也可能與故意留有餘地的伺服器不同。
工作範例 — 將範例 exp 值轉換為人類可讀的時間並根據 iat 檢查它
假設合成有效負載包含 `iat: 1717243200` 和 `exp: 1717246800`。乘以 1,000 得到 ISO 時刻 `2024-06-01T12:00:00.000Z` 和 `2024-06-01T13:00:00.000Z`。減去原始秒值會得到一小時的間隔,而無需將瀏覽器毫秒混合到計算中。
此算術描述了有效負載的內容。它並不表明發行人選擇了這些值或一小時適合任何應用程式。 ToolAcre 漂亮地列印數字,產生 UTC 行,並可以將到期日期稱為相對於今天的舊日期;驗證者必須獨立驗證並執行自己的接受規則。
這不包括什麼——特定伺服器是否會接受令牌,這取決於它的時脈和餘地;解碼器顯示值,而不是結論
解碼器無法預測特定伺服器是否會接受令牌。伺服器可以使用不同的時鐘、配置的容差、更嚴格的宣告模式或附加的發行者和受眾檢查。僅簽名失敗就可以拒絕顯示的 NumericDates 看起來非常普通的令牌。
相反,面向未來的到期並不會使未經驗證的令牌有效。將時間表視為發現可能的單元錯誤並收集調試證據的一種方法。實際的結論屬於伺服器日誌或具有預期金鑰和策略的受控驗證測試,而不是在解碼面板中。
重點:閱讀宣告,進行算術運算 — ToolAcre JWT 解碼器顯示 exp、iat 和 nbf,以便您可以自行檢查單位
閱讀宣告並故意執行比例算術:NumericDate 秒僅在日期邊界處變為 JavaScript 毫秒。 ToolAcre 在原始程式碼中明確地進行乘法運算並顯示結果 ISO 值,同時忽略格式錯誤的時間類型,而不是猜測其作者的意圖。
保持安全區別同樣明確。 `exp` 顯示不是到期強制, `nbf` 顯示不是存取控制,且 `iat` 不是發行證明。檢查一次性令牌後,使用受信任的驗證程序對其進行身份驗證並應用服務的真實時鐘和宣告策略。