繁體中文(台灣)
  • iat
  • issued at time
  • invalid-iat
  • invalid issued at time
  • id token

了解 "iat" 權杖聲明的重要性及故障排除 "invalid issued at time" 錯誤

在這篇文章中,我們將探討 "iat" 聲明在 ID 權杖中的重要性,以及如何排除 "invalid issued at time in ID token" 錯誤。

Charles
Charles
Developer

了解 "iat" 權杖聲明的重要性及故障排除 "invalid issued at time" 錯誤

背景

在我們的社群中,我們時不時地聽到用戶們提出這個令人困惑的問題:"invalid issued at time in the ID token"。用戶們抱怨說 "昨天還在工作,但今天突然不能用了" 或 "這台電腦可以用,但另一台不行"。

在這篇文章中,我們將探討這個問題為什麼會在 Logto 中發生,並為你提供解決問題的技巧。

介紹

在 OAuth 2.0 和 OpenID Connect (OIDC) 中,ID 權杖在安全地傳遞用戶識別信息之間的過程中扮演著重要角色。ID 權杖中的一個聲明被稱為 "iat"(頒發時間),代表授權伺服器頒發 ID 權杖的時間戳。

那麼,為什麼 "iat" 聲明很重要?

  1. 權杖的新鮮度和到期: "iat" 聲明提供了一個關鍵的信息來評估 ID 權杖的新鮮度。通過將 "iat" 時間戳與當前時間進行比較,依賴方可以確定權杖最近何時被頒發。這個信息對於需要確保使用最新身份信息的應用程式來說非常有價值。
  2. 減少重放攻擊: "iat" 聲明在減少重放攻擊中起著至關重要的作用。在重放攻擊中,攻擊者試圖重用先前攔截的權杖。通過允許依賴方為權杖的年齡設置一個容忍窗口,"iat" 聲明有助於檢測此類攻擊。超出此窗口的權杖可以被視為無效。
  3. 執行權杖使用策略: 為了安全原因,應用程序經常會對 ID 權杖的最大允許年齡施加政策。"iat" 聲明使得依賴方可以執行這些策略,確保權杖在指定的時間範圍內使用。這有助於最大限度地降低使用過時權杖所帶來的風險。
  4. 支持權杖撤銷: 在某些情況下,授權伺服器可能需要撤銷發出的權杖。"iat" 聲明在權杖撤銷過程中發揮著關鍵作用,提供了明確的權杖頒發時間戳。它簡化了基於發行時間識別和撤銷特定權杖的過程。

處理 "iat" 聲明的最佳實踐

  • 驗證 "iat" 聲明: 依賴方應始終驗證 "iat" 聲明,以確保其在可接受的範圍內。這個範圍可能會根據應用程式的特定安全要求而有所不同。
  • 考慮時間偏差: 在將 "iat" 時間戳與當前時間進行比較時,要考慮一定程度的時間偏差。時間偏差考慮了授權伺服器和依賴方之間的潛在時間差異。
  • 設置權杖到期政策: 結合 "iat" 聲明與 "exp"(到期時間)聲明,實施全面的權杖使用政策,增強應用程式的整體安全性。

故障排除

現在,臭名昭著的 "invalid issued at time" 錯誤的根本原因幾乎很清楚了。

為了減少重放攻擊並考慮時間偏差,Logto 先前為 ID 權杖設置了一個 60 秒的容忍窗口。任何與世界時間相差超過 60 秒的依賴方被認為具有潛在風險,並且 ID 權杖驗證將失敗,從而出現 "invalid token at time" 錯誤。

然而在現實世界中,時間偏差確實存在,有時你的電腦無法連接到世界時間伺服器以同步電腦時間。有時,授權伺服器會不同步。有時,更糟的是,兩者都不同步。

此外,在 SSO(單一登入)場景中,各種客戶端與 SSO 供應商之間的時間差可能更大。

解決方法

為了減少痛苦並考慮安全措施,Logto 現在已經將非 SSO 身份驗證的 iat 容忍度從 60 秒增加到 5 分鐘,並將 SSO 場景的容忍度增加到 10 分鐘。

同時,你可以通過使用這個方便的工具網站來檢查你的電腦時間是否與世界同步:https://time.is 手動同步你的時間或者更改其他時間伺服器,以確保時間差異始終在我們的容忍窗口內。

結論

ID 權杖中的 "iat" 聲明是增強現代應用程式中身份和訪問管理安全性的重要元素。採用處理 "iat" 聲明的最佳實踐確保了一個穩健且安全的身份驗證過程。

還要確保你的電腦時間始終與世界時間伺服器同步。