OAuth 2.0

Стандарт, по которому одно приложение получает ограниченный доступ к вашим данным в другом сервисе без передачи пароля.

OAuth 2.0 — стандарт делегированного доступа (RFC 6749, 2012 год). Он позволяет приложению получить ограниченный доступ к вашим данным в другом сервисе, не узнавая ваш пароль. Когда сайт предлагает «Войти через Яндекс ID» или сервис бухгалтерии просит доступ к выпискам из банка, за этим обычно стоит OAuth: вы подтверждаете доступ на стороне сервиса, где хранятся данные, а приложение получает не пароль, а токен с ограниченными правами и сроком действия.

Участники

  • Владелец ресурса — пользователь, чьи данные нужны.
  • Клиент — приложение, которое хочет получить доступ.
  • Сервер авторизации — проверяет пользователя, спрашивает его согласия и выдает токены.
  • Сервер ресурсов — API с данными, который принимает токены.

Как проходит авторизация

  1. Приложение перенаправляет пользователя на сервер авторизации с описанием нужных прав (scope) — например, «чтение профиля».
  2. Пользователь входит там — с паролем и при необходимости вторым фактором — и подтверждает доступ.
  3. Сервер возвращает приложению одноразовый код.
  4. Приложение обменивает код на токен доступа (access token) и, как правило, токен обновления (refresh token).
  5. С токеном доступа приложение обращается к 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).