- Expédié
- 14 octobre 2026 à 16:16 UTC
- Auteur
- Kamo
- S'engager
- 618ee73
l'état était base64 JSON {orgId, nonce, fournisseur} construit par l'appelant, le nonce n'a jamais été stocké ou vérifié, et le callback sans session a fait confiance au décodé orgId - n'importe qui pourrait attacher son propre compte Zoom ou Microsoft à un autre org. MeetingOauthStateStore émet maintenant un jeton aléatoire de 64h lié à org, membre et fournisseur (10 minutes TTL); le rappel le dépense avec GETDEL, un commande atomique, donc un callback falsifié, expiré, rejoué ou concurrent deuxième est refusé avant l'appel du prestataire. Les regards redirection-URI. Token rafraîchissement n'avait pas de verrou et a écrit dans la transaction de l'appelant pendant Zoom tourne le jeton rafraîchissant sur chaque utilisation: deux gousses rafraîchissantes à la fois a laissé un jeton révoqué. rafraîchirIfNeeded prend maintenant un verrou Redis par (org, fournisseur) (30 s bail, mainlevée contrôlée par le propriétaire), relise la ligne dans une REQUIRES NEW transaction (un serveur trouve généralement la nouvelle subvention du gagnant et ne dépense jamais le jeton rafraîchissant), et stocke le résultat à travers MeetingOauthTokenWriter (REQUIRES NEW), engagé avant la libération du verrou.
