- Порезанный
- 14 октября 2026 г. в 16:16 UTC
- Автор
- Kamo
- Обещать
- 618ee73
состояние было base64 JSON {orgId, nonce, provider} построено абонентом, nonce никогда не хранился и не проверялся, а бессессионный обратный вызов доверял декодированному OrgId - каждый может прикрепить свою учетную запись Zoom или Microsoft к другой Орг. MeetingOAuthStateStore теперь выпускает случайный 64-хекс токен, связанный с оргом, участник и провайдер (10 минут TTL); обратный звонок проводит его с GETDEL, один атомная команда, так что подделанная, просроченная, переигранная или параллельная вторая обратная связь Отказано до вызова поставщика. Заглядывает перенаправление-URI. Обновление токена не имело блокировки и писалось внутри транзакции абонента, пока Zoom вращает маркер обновления при каждом использовании: два стручка освежают одновременно Остался один с отозванным токеном. Обновление IfNeeded теперь требует блокировки Redis (org, provider) (30s lease, owner-checked release), перечитывает строку в Транзакция REQUIRES NEW (официант обычно находит новый грант победителя). никогда не тратит токен обновления и сохраняет результат через MeetingOAuthTokenWriter (REQUIRES NEW), совершенный до освобождения замка.
