OAuth 2.0
Стандарт, по которому одно приложение получает ограниченный доступ к вашим данным в другом сервисе без передачи пароля.
OAuth 2.0 — стандарт делегированного доступа (RFC 6749, 2012 год). Он позволяет приложению получить ограниченный доступ к вашим данным в другом сервисе, не узнавая ваш пароль. Когда сайт предлагает «Войти через Яндекс ID» или сервис бухгалтерии просит доступ к выпискам из банка, за этим обычно стоит OAuth: вы подтверждаете доступ на стороне сервиса, где хранятся данные, а приложение получает не пароль, а токен с ограниченными правами и сроком действия.
Участники
- Владелец ресурса — пользователь, чьи данные нужны.
- Клиент — приложение, которое хочет получить доступ.
- Сервер авторизации — проверяет пользователя, спрашивает его согласия и выдает токены.
- Сервер ресурсов — API с данными, который принимает токены.
Как проходит авторизация
- Приложение перенаправляет пользователя на сервер авторизации с описанием нужных прав (scope) — например, «чтение профиля».
- Пользователь входит там — с паролем и при необходимости вторым фактором — и подтверждает доступ.
- Сервер возвращает приложению одноразовый код.
- Приложение обменивает код на токен доступа (access token) и, как правило, токен обновления (refresh token).
- С токеном доступа приложение обращается к API.
Это схема Authorization Code. Для мобильных приложений и одностраничных сайтов к ней добавляют защиту PKCE, чтобы перехваченный код нельзя было использовать.
Другие сценарии
- Client Credentials — сервис обращается к другому сервису от своего имени, без пользователя. Типично для интеграций между системами.
- Device Code — вход на устройствах без удобного ввода: телевизорах, терминалах.
Старые упрощенные схемы (Implicit, вход по паролю через клиента) признаны небезопасными и исключены из готовящейся версии OAuth 2.1.
OAuth и вход на сайт
Сам по себе OAuth отвечает на вопрос «что приложению разрешено», а не «кто пользователь». Для входа поверх него используют OpenID Connect: сервер дополнительно выдает ID-токен со сведениями о пользователе, обычно в формате JWT. На этих принципах работают кнопки входа через VK ID и Яндекс ID, а вход через Госуслуги (ЕСИА) построен на OAuth 2.0 с подписью запросов по российским криптоалгоритмам. Подключение входа через ЕСИА — частая задача при разработке личных кабинетов и государственных цифровых услуг.
Типичные ошибки
- Слишком широкие права «на всякий случай» вместо минимально нужных.
- Не проверяется адрес возврата, и код уходит на сайт злоумышленника.
- Долгоживущие токены доступа без возможности отзыва; правильнее — короткий токен доступа и токен обновления, который можно отозвать.
- Токены хранятся там, откуда их может украсть скрипт при атаке XSS.
OAuth — одна из основ современного управления доступом (IAM).