OAuth (протокол авторизации)
OAuth (протокол авторизации) (OAuth) — открытая авторизация
Контекст термина
Термин используется в контексте авторизации пользователей и доступа к API. Не является системой аутентификации сам по себе и не равен JWT или OpenID Connect.
Суть в одном предложении
OAuth — это протокол авторизации, позволяющий приложениям получать ограниченный доступ к ресурсам пользователя без передачи его пароля.
Краткое определение
OAuth — это стандартный протокол делегированной авторизации, при котором пользователь разрешает стороннему приложению доступ к своим данным через токены.
Где используется
- Авторизация через Google / GitHub / VK
- REST API
- SaaS-интеграции
- Мобильные приложения
- Микросервисы
- Cloud-платформы
Что решает OAuth
Без OAuth:
- Приложение требует логин и пароль пользователя.
- Пароль передаётся третьей стороне.
- Риск утечки максимальный.
С OAuth:
- Пользователь подтверждает доступ.
- Приложение получает токен.
- Пароль не передаётся.
Как работает OAuth (упрощённо)
Участники:
- Resource Owner (пользователь)
- Client (приложение)
- Authorization Server
- Resource Server
Поток (Authorization Code Flow)
- Пользователь нажимает «Войти через Google»
- Переход на сервер авторизации
- Пользователь подтверждает доступ
- Клиент получает authorization code
- Код обменивается на access token
- API используется через access token
Пример HTTP-запроса
Получение токена:
POST /token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=abc123& client_id=client_id& client_secret=secret
Ответ:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "def456"
}
Основные типы flow в OAuth 2.0
- Authorization Code
- Client Credentials
- Device Code
- Implicit (устаревший)
- Password (не рекомендуется)
Access Token vs Refresh Token
| Access Token | Refresh Token |
|---|---|
| Короткий срок жизни | Долгий срок |
| Используется для API | Обновляет access token |
| Передаётся в заголовке | Хранится безопасно |
Пример запроса к API:
GET /api/user Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
OAuth ≠ Authentication
OAuth — это авторизация (разрешение доступа). Для аутентификации используется OpenID Connect поверх OAuth.
Где особенно важно
- API с внешними клиентами
- SaaS-сервисы
- Интеграции
- Mobile + Web приложения
- Микросервисы
Частые ошибки
❌ Хранение access token в localStorage без защиты ❌ Передача токена по HTTP ❌ Использование Implicit Flow ❌ Секрет клиента в frontend
Безопасность
- Использовать HTTPS
- Применять PKCE для публичных клиентов
- Ограничивать scope
- Настраивать expiration
Что не является OAuth
- JWT (это формат токена)
- OpenID Connect (надстройка для аутентификации)
- Session-based login
- Basic Auth
Архитектурное значение
OAuth позволяет:
- Делегировать доступ
- Изолировать пароль пользователя
- Масштабировать API-доступ
- Управлять правами через scopes
Это стандарт для современных API.
Аналоги и связанные термины
- JWT
- Access Token
- Refresh Token
- OpenID Connect
- Authentication
- Authorization
- REST API
Пример использования
«Мобильное приложение авторизуется через OAuth и получает access token для работы с REST API.»
Мини-FAQ
OAuth — это логин через Google? Это механизм, который лежит в основе такого логина.
Можно ли использовать OAuth внутри микросервисов? Да, через client credentials flow.
JWT обязателен в OAuth? Нет, но часто используется как формат токена.
Смотри также
- Access Token
- JWT
- OpenID Connect
- Authentication
- REST API