- Verschifft
- 23. September 2026 um 02:58 UTC
- Autor
- Kamo
- Ausschuss
- 78c4a87
/api/email/oauth/callback und ************ sind öffentlich und sessionless (die Provider leitet den Browser hier ohne Kamo-Sitzung um), also war "State" der einzige Ort Organisation konnte von kommen und es war selbstbeschreibende Basis64 JSON der CALLER gebaut: {"orgId": 1, "Nonce": "..., "Provider": "GOOGLE_WORKSPACE" Jeder konnte eine Handarbeit basteln, die eine verschiedene org und spielen Sie es gegen einen Autorisierungscode, den sie für ihre eigenen erhalten; die "Nonce" im Inneren wurde es erzeugt, aber nie gespeichert oder gegen etwas überprüft, so dass es nichts gestoppt. Die Callback vertrauenswürdig orgId/Provider/memberId direkt aus dieser Dekodierung und aktiviert die verbunden Anbieter für welche Org der Staat benannt. OAuthStateStore prägt jetzt einen undurchsichtigen, unvorstellbaren Token auf "Issue", das Org/Mitglied/Anbieter/ fließt es auf eine Redis-Platte mit 10-minütigem TTL - nie im Token selbst. "Peek" liest diese Aufzeichnung, ohne sie auszugeben (verwendet, um die umgeleitete URI und den Fluss vor einem Callback verpflichtet sich zu einem Handler); "Verbrauchen" liest und löscht ihn dauerhaft, so dass ein Rückruf ist Single-Use: ein wiedergegebenes oder wiederverwendetes Token löst zu nichts, ununterscheidbar von einem, das nie existierte. OAuthFlowService und GroupwareOAuthService - die diesen Blob gebaut und dekodiert haben unabhängig, jeder mit seiner eigenen Kopie des gleichen Mechanismus - jetzt sowohl Mint und einlösen Token durch diesen einen Laden, so gibt es genau einen Ort, der entscheidet, was ein Zustand Token bedeutet. OAuthStateStoreTest scheitert ohne den Fix (ein zweiter Konsum desselben Tokens liefert immer noch die aufnehmen statt null); OAuthFlowServiceTest, OAuthFlowKindStateTest und GroupwareOAuthServiceTest werden für den neuen Mechanismus aktualisiert - sie bauen oder dekodieren einen Zustand Blob direkt nicht mehr, da es gibt nichts mehr zu entschlüsseln.
