繁體中文(香港)
事後分析:意外的 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,以便在發布前發現潛在問題。