Если авторизация через Одноклассники перестала выдавать токен, пользователи не могут войти через соцсеть, хотя раньше сценарий работал. Обычно ломается связка redirect_uri, секретов, scope и callback.
Сначала нужно определить, на каком шаге OAuth остановился: пользователь не возвращается на сайт, приходит error, не меняется code на token или токен есть, но профиль не загружается.
Коротко: что сделать
- Проверить redirect_uri в коде и настройках приложения
- Проверить client_id, secret и public key
- Проверить HTTPS и доступность callback URL
- Посмотреть ответ token endpoint
- Проверить scope и права приложения
Основные причины
У проблемы может быть несколько уровней: интерфейс, backend, права, внешняя интеграция, кэш, очередь задач или настройки сервера. Поэтому лучше не гадать, а пройти цепочку от действия пользователя до записи в логах и базе.
- Redirect URI не совпадает с зарегистрированным
- Секрет приложения изменился или указан неверно
- Callback URL недоступен по HTTPS
- Сайт неправильно обрабатывает error вместо code
- Изменились scope или настройки OAuth-приложения
Пошаговая диагностика
Диагностику удобнее вести на одном воспроизводимом примере: один пользователь, один заказ, один запрос, один файл или одно событие. Так проще отделить реальную причину от случайных совпадений.
- Сохранить полный URL возврата без секретов
- Проверить логи callback endpoint
- Повторить обмен code на token вручную в тестовом окружении
- Проверить дату изменения настроек приложения
- Проверить, не блокирует ли сервер исходящий запрос к OAuth API
Как исправить проблему
Исправление должно закрывать первопричину. Если затронуты платежи, доступы, персональные данные, уведомления или рабочие заказы, сначала проверьте решение на тестовом сценарии и сохраните возможность отката.
- Синхронизировать redirect_uri между сайтом и кабинетом OK
- Обновить секреты в env и очистить кеш конфигурации
- Исправить обработку ошибок OAuth
- Добавить логирование шага code-to-token
- Проверить и обновить запрашиваемые scope
Безопасный план решения
Не публикуйте client secret и токены в логах. Для диагностики сохраняйте только статус, код ошибки и технический request_id без чувствительных значений.
Чего не стоит делать
- Не отключать проверку state
- Не хранить access token в открытом виде без необходимости
- Не менять redirect_uri на боевом сайте без теста
- Не показывать пользователю сырой OAuth-ответ
Что подготовить перед исправлением
- URL callback
- Текст ошибки OAuth
- Время последней успешной авторизации
- Фрагмент настроек приложения без секретов
- Framework сайта
FAQ
Почему OAuth сломался без изменения кода?
Могли измениться настройки приложения, домен, SSL, redirect_uri, секреты или доступность callback.
Что такое state и зачем он нужен?
State защищает от подмены OAuth-сценария. Его нельзя отключать ради упрощения входа.
Можно ли временно оставить вход по email?
Да, но social login лучше восстановить, если пользователи привыкли к этому способу входа.
Когда стоит обратиться за помощью
Обратиться стоит, если социальный вход используется массово и пользователи теряют доступ к аккаунтам или заказам.
Итог
Проверьте redirect_uri, секреты, callback, state и ответ token endpoint. Если нужно восстановить OAuth через Одноклассники, пишите в Telegram @rabotator_support.