- Cambia
- 14 de octubre de 2026 a las 16:16 UTC
- Autor
- Kamo
- Comprometerse
- 618ee73
estado era base64 JSON {orgId, nonce, proveedor} construido por el callador, el nonce nunca fue almacenado o comprobado, y el callback sin sesión confió en el decodificado orgId - cualquiera podría adjuntar su propia cuenta de Zoom o Microsoft a otra org. MeetingOAuthStateStore ahora emite un token al azar de 64 hex ligado a org, miembro y proveedor (10 minutos TTL); el callback lo gasta con GETDEL, uno comando atomic, so a forged, expired, replayed or concurrent second callback se rechaza antes de que se llame al proveedor. La búsqueda redireccionada-URI mide. Token refresco no tenía cerradura y escribió dentro de la transacción del callador mientras Zoom gira el token refrescante en cada uso: dos cápsulas refrescante a la vez dejó una token revocada. refrescoSi necesita ahora toma un bloqueo Redis por (org, proveedor) (30 s arrendamiento, versión revisada por el propietario), vuelve a leer la fila en una transacción REQUIRES NEW (un camarero generalmente encuentra la nueva subvención del ganador y nunca pasa el refresco, y almacena el resultado a través MeetingOAuthTokenWriter (REQUIRES NEW), comprometido antes de que se libere el bloqueo.
