- Se descapó
- 23 de septiembre de 2026 a las 2:58 UTC
- Autor
- Kamo
- Compromit
- 78c4a87
/api/email/oauth/callback y **************** son públicos y sin sesiones (el el proveedor redirija el navegador aquí sin sesión de Kamo, así que "state" era el único lugar el La organización podía provenir de la base de autodescripción64 JSON el CALLER construido: "orgullo": 1, "nonce": "...", "provider": "GOOGLE-WORKSPACE". Cualquiera podía hacer a mano nombrando a un diferente org y volver a reproducirlo contra un código de autorización que obtuvieron para los suyos; la "nonce" En su interior se generó pero nunca se almacenó ni se cotejó con nada, por lo que no detuvo nada. El callback de confianza orgId/provider/memberId directamente de ese decodificar y activó el conectado proveedor para cualquier org the estado nombrado. OAuthStateStore ahora vacía un token opaco, inexpediduible en el asunto, manteniendo el org/miembro/provider/ flujo se resuelve sólo en un disco de Redis con un TTL de 10 minutos nunca en la muestra misma. Lee ese registro sin gastarlo (utilizado para elegir el URI de redirección y el flujo antes de un callback se compromete con un manejador); "Consume" lee y lo elimina permanentemente, por lo que una devolución de llamada es un solo uso: un símbolo reproducido o reutilizado se resuelve a la nada, indistinguible de uno que nunca existía. OAuthFlowService y GroupwareOAuthService - que solía construir y decodificar que blob Independientemente, cada uno con su propia copia del mismo mecanismo, ahora tanto la menta como los fichas de canje a través de esta tienda, así que hay exactamente un lugar que decide lo que significa un estado token. OAuthStateStoreTest falla sin la solución (un segundo consumo de la misma ficha todavía devuelve el registrar en lugar de null); OAuthFlowServiceTest, OAuthFlowKindStateTest y GroupwareOAuthServiceTest se actualizan para el nuevo mecanismo - ya no construyen o decodifican un estado blob directamente, desde No queda nada que decodificar.
