OAuth 2.1, OIDC и токены в сервисах
API, мобильные приложения и современные интерфейсыКак правильно делегировать доступ, не создавая дыр: потоки, токены, области действия и типовые ошибки.
Зачем это нужно
- Ошибки в OAuth — одна из самых частых причин серьёзных утечек в современных приложениях.
- Правильное делегирование доступа снижает объём хранимых секретов.
- Понимание потоков необходимо для проверки любых интеграций.
Теория
OAuth 2.1 — протокол делегирования доступа: клиент получает разрешение у владельца ресурса и обменивает его на токен доступа. Для веб-приложений с серверной частью применяется код авторизации с обязательным подтверждением ключа (PKCE); для одностраничных и мобильных приложений — также код с PKCE; для сервисов без пользователя — доверенные учётные данные клиента. Неявный поток исключён как небезопасный.
OpenID Connect добавляет аутентификацию поверх OAuth: идентификатор-токен, сведения о пользователе и стандартные механизмы выпуска. Важна корректная проверка подписи, издателя, аудитории, срока и одноразового значения. Токены доступа должны быть узкими по областям действия, короткоживущими и привязанными к аудитории; токены обновления — защищёнными, с возможностью отзыва и ротации.
Типовые ошибки: отсутствие проверки значения состояния и одноразового значения при входе; открытые перенаправления после авторизации; хранение токенов в местах, доступных скриптам страницы; слишком широкие области действия; проверка только подписи без проверки аудитории и издателя; отсутствие отзыва; доверие к токену, выпущенному для другого сервиса. Защита строится на строгой проверке всех полей, узких областях, коротких сроках и явном управлении клиентами.
Ключевые концепции
- Код авторизации с PKCE
- Рекомендуемый поток: подтверждение ключа защищает от перехвата кода.
- Области действия
- Границы разрешений, которые запрашивает клиент: должны быть минимально необходимыми.
- Аудитория токена
- Сервис, для которого выпущен токен: обязательная проверка при приёме.
- Токен обновления и его ротация
- Долгоживущий токен с ограничениями, ротацией и возможностью отзыва.
- Открытое перенаправление
- Неконтролируемая передача данных авторизации на чужой адрес.
- Согласие и его отзыв
- Пользователь должен видеть запрашиваемые права и иметь возможность их отозвать.
Инструменты
- Библиотеки и провайдеры удостоверений, поддерживающие современные потоки.
- Средства анализа токенов: проверка подписи, полей, сроков действия.
- Тестовые окружения для проверки интеграций OAuth.
- Инструменты отладки интеграций: инспекторы запросов в своей лаборатории.
- Сканеры конфигурации провайдеров удостоверений.
Практика в легальных лабораториях
- Настройте в лаборатории провайдера удостоверений и подключите к нему тестовое приложение.
- Проверьте, что приложение отклоняет токен с неверной аудиторией или издателем.
- Настройте минимальные области действия и убедитесь, что расширенные операции недоступны.
- Смоделируйте отзыв доступа и проверьте, что приложение реагирует корректно.
- Составьте чек-лист проверки интеграции OAuth и OIDC.
Защита, детект и защитные меры
- Применяйте только рекомендованные потоки и обязательное подтверждение ключа.
- Проверяйте все поля токена: подпись, издателя, аудиторию, сроки, одноразовые значения.
- Выдавайте узкие области действия и короткие сроки; настраивайте ротацию и отзыв.
- Регистрируйте точные адреса перенаправления и запрещайте подстановочные.
Правовая рамка и этика
- Проверка интеграций выполняется на своих приложениях и в тестовых окружениях провайдеров.
- Не используйте чужие идентификаторы клиентов и секреты, найденные в открытых источниках.
Типичные ошибки
- Использовать неявный поток или доверять токену без проверки аудитории.
- Хранить токены обновления в местах, доступных клиентскому коду.
- Запрашивать широкие области действия «на будущее».
Чек-лист «умею»
- Знаю рекомендованные потоки и почему они безопаснее.
- Проверяю все обязательные поля токена.
- Настраиваю области действия по минимуму.
- Умею организовать отзыв и ротацию.
- Понимаю разницу между OAuth и аутентификацией по OIDC.
Вопросы на интервью
- Почему неявный поток исключён из рекомендаций?
- Какие поля токена обязательно проверять и почему?
- Как вы ограничите ущерб от утечки токена обновления?