Skip to main content

Протокол OAuth

OAuth vs OAuth 2.0 — в чём разница

OAuth 1.0OAuth 2.0
Год20072012
Подписи (signatures)Да, обязательны (HMAC, RSA)Нет, токены обычные (Bearer)
Обмен токенамиСложный (многоступенчатый)Гибкий и модульный
Поддержка клиентовТолько с серверомЕсть client_credentials, password, authorization_code, implicit, refresh_token, PKCE
БезопасностьБолее безопасен на уровне протокола, но сложенБезопасность зависит от реализации
СтандартыМного ручной работыСтал де-факто стандартом

OAuth 2.0 — это полностью переработанная, более гибкая, но менее строгая по протоколу версия.


Как работает OAuth 2.0 (упрощённо)

Цель

Позволить стороннему приложению (например, Zapier) получить доступ к твоему API от имени пользователя или от имени сервиса, без передачи логина/пароля.


Потоки авторизации в OAuth2 (flows)

1. Authorization Code Flow (с пользователем)

Самый распространённый для UI-приложений.

  1. Пользователь перенаправляется на страницу авторизации (/oauth/authorize)
  2. Вводит логин/пароль
  3. Приложение получает authorization code
  4. Меняет его на access_token
  5. Использует Authorization: Bearer abc123 в запросах к API

2. Client Credentials Flow (без пользователя)

Идеально для машинных интеграций (например, Zapier).

  1. Запрос с client_id + client_secret
  2. Получаешь access_token
  3. Используешь его при вызове API

Как выглядит запрос с OAuth2 токеном

GET /api/v4/listings
Authorization: Bearer abc123

Главное отличие от Basic/Auth Key

Basic AuthOAuth 2.0
Где хранятся ключиУ клиентаУ сервера, клиент получает временный токен
Возможность отозватьНетДа (revoke token)
Время жизниБессрочно (обычно)Ограничено + есть refresh_token
Может быть от имени пользователяНетДа (resource owner)
Поддержка разных уровней доступа (scopes)НетДа

OAuth2 — это стандарт для "разреши другому приложению временно и безопасно использовать мой API". Без передачи логина и пароля, с контролем доступа.


Сравнительная таблица способов аутентификации

СпособУровень безопасностиПоддержка в ZapierЛёгкость внедренияМасштабируемостьСовременностьКомментарий
Basic Auth🟡 Низкий (если без HTTPS)✅ Да✅ Очень просто🔴 Плохо (учётки не масштабируются)🔴 УстареваетХорош для начальных тестов, но не рекомендуется в прод
API Key (в заголовке)🟡 Средний✅ Да✅ Просто🟡 Ограничено (трудно управлять правами)🟡 ТерпимоПодходит для сервер-сервер взаимодействия
OAuth2 (Doorkeeper)🟢 Высокий✅ Да (родная поддержка)🔴 Сложнее🟢 Отлично масштабируется🟢 Стандарт де-фактоРекомендуется для любых публичных/внешних API
JWT (сами по себе)🟢 Высокий🔴 Нет нативной поддержки🟡 Средне🟢 Да🟡 Модно, но надо реализовывать вручнуюИспользуется во внутренних API, требует контроля
Session + Cookie🔴 Плохо для API🔴 Нет🔴 Только для браузеров🔴 Не масштабируется🔴 Не используется в APIНе подходит для Zapier и REST API