Postmortem: unerwartete JWT-Änderung von `iss`
Vorfallsbericht für die unerwartete JWT-Änderung von `iss` am 18.03.2024.
Zusammenfassung
Am 18.03.2024 führte ein Update, das das Verhalten des JWT-Ausstellers in Logto Cloud änderte, dazu, dass Authentifizierungsabläufe für Benutzer mit benutzerdefinierten Domains und iss
-Validierung unterbrochen wurden. Um dies zu beheben, mussten diese Benutzer ihre Validierungslogik aktualisieren.
- Betroffene Benutzer: Benutzer mit aktivierten benutzerdefinierten Domains und
iss
-Validierung. - Schweregrad: Kritisch, Unterbrechung der
iss
-Validierung innerhalb der Authentifizierungsabläufe.
Grundursache
Das Update änderte das iss
-Feld, um mit der angeforderten Domain übereinzustimmen, wodurch bestehende Validierungen unterbrochen wurden, die den vorherigen Standardaussteller erwarteten.
Zeitachse
- 18.03.2024 10:00 (UTC): Updates implementiert, Änderung des
iss
-Verhaltens. - 18.03.2024 23:30 (UTC): Erster Benutzerbericht eingegangen, dass das bestehende Verhalten unterbrochen wurde.
- 19.03.2024 12:00 (UTC): Problem bestätigt und Untersuchung begonnen.
- 19.03.2024 14:00 (UTC): Grundursache und Auswirkungen identifiziert.
- 20.03.2024 20:00 (UTC): E-Mail an betroffene Benutzer vorbereitet.
- 20.03.2024 06:00 (UTC): E-Mails an alle betroffenen Benutzer gesendet.
Auswirkungenanalyse
Details der Veröffentlichung
Logto Cloud unterstützt benutzerdefinierte Domains für Authentifizierung. Entwickler, die Mieter mit aktivierten benutzerdefinierten Domains haben, können den Endpunkt in SDKs auf die benutzerdefinierte Domain setzen. Der Endbenutzer verwendet diesen Endpunkt, um den Authentifizierungsprozess zu starten und Tokens zu erhalten. Einige Tokens liegen in Form von JWT vor, das ein iss
-Feld enthält, das den Aussteller dieses Tokens angibt. Bisher wurde bei Verwendung eines benutzerdefinierten Domain-Endpunkts zur Anforderung eines Zugriffstokens der Aussteller standardmäßig auf unsere Standarddomain ([tenant-id].logto.app
) gesetzt.
Der Domain des Ausstellers sollte jedoch mit dem angeforderten Endpunkt übereinstimmen. Daher haben wir ein Update veröffentlicht, um dieses Problem zu beheben, und das iss
-Feld wird nun automatisch die bei der Anforderung verwendete Domain widerspiegeln.
Für diejenigen, die bereits eine benutzerdefinierte Domain verwenden, um Tokens zu erteilen und eine iss
-Feldvalidierung im Ressourcenaserver implementiert haben, könnte dies eine erhebliche Änderung sein. Die bestehende Authentifizierungsprüfung schlägt aufgrund der Änderung des Ausstellers fehl. Um dies zu beheben, müssen die Entwickler den Validierungscode ändern und den erwarteten Aussteller auf den neuen mit der benutzerdefinierten Domain ersetzen.
Wir haben es versäumt, die Auswirkungen auf bestehende iss
-Validierungen vollständig zu berücksichtigen. Als Ergebnis wurde diese Veröffentlichung zu einer erheblichen Änderung ohne vorherige Benachrichtigung.
Lösung
Benachrichtigung der betroffenen Benutzer per E-Mail mit dem Hinweis, ihre iss
-Validierung zur Übereinstimmung mit der angeforderten Domain zu aktualisieren.
Rücknahmen?
Die Änderung ist eine notwendige Korrektur für das Ausstellerfeld, und einige Benutzer haben sich möglicherweise bereits an das neue Verhalten angepasst. Eine Rücknahme würde zu Verwirrung und Inkonsistenz führen.
Erkenntnisse
- Codeänderungen, die die Kernauthentifizierung betreffen, müssen zusätzlich zu den regulären Überprüfungen von dem Team genehmigt werden.
- Automatische Tests sollten mehr Fälle abdecken, insbesondere in cloud-spezifischen Szenarien.
Korrektur- und Präventivmaßnahmen
- Integrationstests hinzufügen: Testfälle hinzufügen, um das Szenario in diesem Vorfall abzudecken.
- Überwachungsprojekte für Funktionen: Zusätzlich zu Logto Cloud unsere eigenen Nebenprojekte erstellen und tief mit Logto integrieren, um potenzielle Probleme vor Veröffentlichungen zu erkennen.