OAuth 2.0 API
Введение
Этот документ описывает процесс интеграции с сервером OAuth 2.0, реализованным в соответствии с RFC 6749. Система предоставляет возможность авторизации сторонних сервисов и получения защищённого доступа к ресурсам.
Перед подключением необходимо оставить заявку в техподдержку!
Основные концепции
- Authorization Code Flow: используется для серверных приложений.
- Client Credentials Flow: для серверов, где пользовательская авторизация не требуется.
- Implicit Flow: используется для SPA (одностраничных приложений).
- Refresh Tokens: обновление токенов доступа.
Endpoints
1. Authorization Endpoint
URL: /id/oauth/authorize
Метод: GET
Описание: Используется для получения кода авторизации или токена (в зависимости от потока).
Параметры запроса:
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
response_type | string | Да | Тип ответа: code или token |
client_id | string | Да | Уникальный идентификатор клиента |
redirect_uri | string | Нет | URL, куда будет перенаправлен пользователь |
scope | string | Нет | Запрашиваемые права доступа |
state | string | Нет | Произвольное значение для защиты от CSRF |
Пример запроса:
GET /oauth/authorize?response_type=code&client_id=12345&redirect_uri=https://example.com/callback&scope=read&state=xyz
Пример ответа (успешного):
HTTP/1.1 302 Found Location: //example.com/callback?code=abc123&state=xyz>
Пример ошибки:
HTTP/1.1 400 Bad Request { "error": "invalid_request", "error_description": "Missing 'client_id' parameter." }
2. Token Endpoint
URL: /id/oauth/token
Метод: POST
Описание: Используется для получения токена доступа и, опционально, токена обновления.
Параметры тела запроса:
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
grant_type | string | Да | Тип потока: authorization_code , password , client_credentials или refresh_token |
code | string | Для authorization_code | Код авторизации |
redirect_uri | string | Для authorization_code | URL, использованный при авторизации |
client_id | string | Да | Уникальный идентификатор клиента |
client_secret | string | Да | Секретный ключ клиента |
refresh_token | string | Для refresh_token | Токен обновления |
Пример запроса:
POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=abc123&redirect_uri=https://example.com/callback&client_id=12345&client_secret=secret
Пример ответа (успешного):
HTTP/1.1 200 OK { "access_token": "xyz456", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "def789", "scope": "read" }
Пример ошибки:
HTTP/1.1 400 Bad Request { "error": "invalid_grant", "error_description": "Authorization code has expired." }
Ошибки
Код ошибки | Описание |
---|---|
invalid_request | Некорректный запрос |
invalid_client | Ошибка аутентификации клиента |
invalid_grant | Неправильный или просроченный токен |
unauthorized_client | Клиент не имеет разрешения |
unsupported_grant_type | Тип предоставления не поддерживается |