繁體中文(台灣)
  • postmortem
  • cloud-service
  • incident

事件後分析:意外的 JWT `iss` 變更

2024-03-18 發生的意外 JWT `iss` 變更事件報告。

Sijie
Sijie
Developer

摘要

在 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,以在發布前捕獲潛在問題。