了解 "iat" token 聲明的重要性並排除 "Invalid issued at time" 錯誤
在這篇文章中,我們將探索 ID token 中 "iat" 聲明的重要性,以及如何排除 "Invalid issued at time in ID token" 錯誤。
了解 “iat” token 聲明的重要性並排除 “Invalid issued at time” 錯誤
背景
在我們的社群中,我們時不時會聽到用戶提到這個令人費解的問題——“Invalid issued at time in the ID token”。用戶抱怨說:“昨天還能用,今天突然不能用了”或者“在這台電腦上可以用,但在另一台不行”。
在這篇文章中,我們將探討這個問題在 Logto 中為何發生,並提供相應的解決方法幫助你解決它。
介紹
在 OAuth 2.0 和 OpenID Connect (OIDC) 中,ID token 在安全傳遞用戶身份信息之間起重要作用。ID token 中有一個聲明稱為 "iat"(發行時間),表示 ID token 由授權伺服器發行的時間戳。
那麼為什麼 “iat” 聲明很重要?
- Token 的新鮮度和到期: "iat" 聲明為評估 ID token 的新鮮度提供了關鍵信息。通過將 "iat" 時間戳與當前時間比較,受信方可以確定 token 剛剛發行的時間。這對於需要確保使用最新身份信息的應用程式非常有用。
- 減少重放攻擊: "iat" 聲明在減少重放攻擊中起著重要作用。在重放攻擊中,攻擊者試圖重用先前截獲的 token。"iat" 聲明有助於檢測此類攻擊,允許受信方設置 token 的年齡容忍窗口。超出此窗口的 token 可被視為無效。
- 強制執行 token 使用政策: 出於安全原因,應用程式通常會在 ID token 的最大年齡上施加政策。"iat" 聲明使受信方可以執行這些政策,確保在指定時間範圍內使用 token。這有助於最大限度地減少使用過期 token 相關的風險。
- 支持 token 撤銷: 在某些情況下,授權伺服器可能需要撤銷已發行的 token。"iat" 聲明在 token 撤銷過程中起著重要作用,提供了清晰的時間戳以顯示 token 的發行時間。這簡化了基於發行時間識別和撤銷特定 token 的過程。
處理 “iat” 聲明的最佳實踐
- 驗證 "iat" 聲明: 受信方應驗證 "iat" 聲明,確保其在可接受的範圍內。具體範圍可能會根據應用程式的安全要求而有所不同。
- 考慮時鐘偏差: 在使用當前時間比較 "iat" 時間戳時允許一定程度的時鐘偏差。時鐘偏差可以考慮到授權伺服器和受信方之間可能存在的時間差異。
- 設置 token 到期政策: 結合 "iat" 與 "exp"(到期時間)聲明,強制執行全面的 token 使用政策,以增強應用程式的整體安全性。
故障排除
現在,“Invalid issued at time” 錯誤的根本原因幾乎已經清楚。
為減少重放攻擊並考慮時鐘偏差,Logto 以前為 ID token 設置了 60 秒的容忍窗口。任何設定的時間差異超過 60 秒的受信方都被視為有潛在風險,並將未能通過 ID token 驗證。因此 ,出現了 “Invalid token at time” 錯誤。
然而在現實中,時鐘偏差時常發生,有時你的電腦無法連接到世界時間伺服器來同步電腦時間。有時授權伺服器不同步。有時甚至更糟,雙方都不同步。
此外,在 SSO 場景中,各個客戶端和 SSO 提供者之間的時間差距可能更大。
解決方案
為了緩解問題並考慮安全措施,Logto 現在將 iat 容忍度從 60 秒增加到非 SSO 驗證的 5 分鐘,SSO 場景中的 10 分鐘。
同時,你可以使用這個便利的工具網站檢查你的電腦時間是否與世界時間同步:https://time.is 手動同步時間或切換到其他時間伺服器,確保時間差總是在我們的容忍窗口內。
總結
ID token 中的 "iat" 聲明是現代應用程式中增強身份和訪問管理安全性的關鍵元素。採用處理 "iat" 聲明的最佳實踐可確保身份驗證過程的堅固和安全。
還要確保你的電腦時間總是與世界時間伺服器同步。