Разработка API: Чем отличается авторизация по Basic Auth от OAuth2 и в чем преимущество последнего?
При разработке API выбор механизма авторизации напрямую влияет на безопасность, удобство и масштабируемость системы. Два наиболее распространённых подхода — Basic Auth и OAuth2 — принципиально отличаются по архитектуре и уровню защиты.
**Basic Auth (Базовая аутентификация)**
Basic Auth — простейший способ авторизации, описанный в стандарте HTTP. Клиент при каждом запросе передаёт в заголовке `Authorization` строку вида `Basic `. Сервер декодирует её и проверяет учётные данные.
Основные характеристики:
— Логин и пароль передаются при каждом запросе (пусть и в закодированном виде).
— Base64 — это не шифрование, а лишь кодирование. Без HTTPS данные легко перехватить.
— Нет механизма истечения срока действия токена.
— Нет разграничения прав доступа (scope).
— Для отзыва доступа нужно менять пароль, что затрагивает все интеграции сразу.
**OAuth2 (Open Authorization 2.0)**
OAuth2 — это протокол делегированной авторизации, разработанный специально для сценариев, где третьей стороне нужно предоставить ограниченный доступ к ресурсам без передачи пароля. Вместо учётных данных клиент получает временный токен доступа (access token).
Ключевые понятия OAuth2:
— **Access Token** — краткосрочный токен для доступа к API.
— **Refresh Token** — долгосрочный токен для обновления access token без повторного ввода пароля.
— **Scopes** — гранулярные права доступа (например, `read:profile`, `write:orders`).
— **Grant Types** — различные сценарии получения токена: Authorization Code, Client Credentials, Implicit, Resource Owner Password.
**Ключевые отличия**
| Параметр | Basic Auth | OAuth2 |
|—|—|—|
| Передача секрета | При каждом запросе | Только при получении токена |
| Срок действия | Бессрочно | Ограничен (обычно минуты/часы) |
| Гранулярность прав | Нет | Scopes |
| Отзыв доступа | Смена пароля | Отзыв конкретного токена |
| Делегирование | Невозможно | Встроено в протокол |
**Преимущества OAuth2**
1. **Безопасность**: пароль не передаётся при каждом запросе — только токен, который можно быстро отозвать.
2. **Ограниченный доступ**: через scopes можно выдать права только на нужные операции.
3. **Делегирование**: пользователь может разрешить стороннему приложению доступ к своим данным без передачи пароля.
4. **Масштабируемость**: подходит для микросервисной архитектуры и сложных систем.
5. **Стандартизация**: широкая поддержка в библиотеках и фреймворках.
**Когда использовать Basic Auth?**
Basic Auth оправдан в простых внутренних инструментах, скриптах или при прототипировании, когда безопасность не критична и всегда используется HTTPS. Для production-систем, особенно публичных API, рекомендуется OAuth2.
