繁體中文(台灣)
事件後分析:意外的 JWT `iss` 變更
2024-03-18 發生的意外 JWT `iss` 變更事件報告。
摘要
在 2024-03-18,Logto Cloud 中一項更改 JWT 發行者行為的更新破壞了使用自定義域名和 iss
驗證的用戶的身份驗證流程。此修復需要這些用戶更新他們的驗證邏輯。
- 受影響的用戶:已啟用自定義域名並執行
iss
驗證的用戶。 - 嚴重性:嚴重,破壞身份驗證流程中的
iss
驗證。
根本原因
更新更改了 iss
欄位以匹配請求的域名,打破了依賴先前預設發行者的現有驗證。
時間線
- 2024-03-18 10:00 (UTC):部屬更新,改變
iss
行為。 - 2024-03-18 23:30 (UTC):收到第一個用戶報告現有行為失效。
- 2024-03-19 12:00 (UTC):確認問題並開始調查。
- 2024-03-19 14:00 (UTC):識別問題根源和影響。
- 2024-03-20 20:00 (UTC):準備好發給受影響用戶的電子郵件。
- 2024-03-20 06:00 (UTC):向所有受影響的用戶發送電子郵件。
影響分析
發佈細節
Logto Cloud 支援身份驗證的自定義域名,開發者啟用自定義域名的租戶可以在 SDK 中設定端點到自定義域名,然後最終用戶將使用此端點初始化身份驗證流程並獲取令牌。部分令牌是 JWT 格式,其中包含 iss
欄位,表示此令牌的發行者。以前, 即便使用自定義域名端點請求訪問令牌,發行者仍會默認為我們的標準域名([tenant-id].logto.app
)。
但發行者的域名應與請求的端點相同。因此,我們發布了一個更新來修正此問題,現在 iss
欄位將自動反映在請求中使用的域名。
對於那些已經使用自定義域名授權令牌並在資源服務器中實施 iss
欄位驗證的用戶,這可能是一次重大變更。現有的身份驗證將因發行者的變更而失敗。為了解決這個問題,開發者需要更改驗證代碼,將預期的發行者替換為新的自定義域名。
我們未能充分考慮對現有 iss
驗證的影響,結果此次發布成為未經事先通知的重大變更。
解決方案
通過電子郵件通知受影響的用戶,建議他們更新他們的 iss
驗證以匹配請求的域名。
回滾?
此更改對於發行者欄位是必要的修正,一些用戶可能已經適應了新的行為。回滾將導致混淆和不一致。
教訓
- 涉及核心身份驗證的代碼更改必須由團隊批准,除了定期審核之外。
- 自動測試應涵蓋更多案例,尤其是雲端特定場景。
糾正和預防措施
- 添加整合測試:添加測試案例以涵蓋此次事件中的場景。
- 特徵監控項目:除了 Logto Cloud,還要創建我們自己的側邊項目並深度集成 Logto,以在發布前捕獲潛在問題。