Обмен авторизационного кода на маркер доступа
После получения авторизационного кода потребитель должен его обменять на маркер доступа.
Запрос
Потребитель отправляет HTTPS POST запрос на URI https://login.wmtransfer.com/oauth/api/v1/tokens. Запрос должен содержать параметры:
| Название | Назначение |
|---|---|
| grant_type | нужно указывать authorization_code |
| code | авторизационный код, полученный с помощью Authorize API |
| redirect_uri | URI обратного вызова. Должно в точности соответствовать URI, указанному при обращении к Authorize API |
Поддерживаются Basic и Digest схемы аутентификации потребителя.
Пример запроса:
POST /oauth/api/v1/tokens HTTP/1.1 Host: login.wmtransfer.com Authorization: Basic Nzk5Q25YaWNHMldmckZ2ajpxRkU3UFhFR1J3Y0d3UDQ1WktVUlhNRGZ6M2pMVnhmZQ== Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=joMD6VGDAUJDS86Dm9uE7gH61gGvC8Cd&redirect_uri=https%3A%2F%2Fconsumer%2Eexample%2Ecom%2Fcb
Ответ
Сервер проверяет аутентификационные данные запроса, авторизационный код и URI обратного вызова. Если все верно, то возвращает ответ, содержащий:
Описание полей
| Название | Назначение |
|---|---|
| access_token | новый маркер доступа |
| token_type | тип маркера доступа, всегда "bearer" |
| expires_in | оставшееся время действия |
| refresh_token | маркер обновления авторизации, опционально |
| scope | область действия |
Примеры ответов
Успех:
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "GJDbhQ3abhyKeSmfKFhp8igi2cub7cJo",
"token_type": "bearer",
"expires_in": "599",
"refresh_token": "MnT8tDhFZiz9FEom3onEBaXFJtnCYvH8",
"scope": "scope1 scope2"
}
Использован неверный секрет потребителя:
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=utf-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_client",
"error_description": "Ошибка аутентификации потребителя (например, неизвестный потребитель, данные аутентификации не включены в запрос, или не поддерживается метод аутентификации).",
"error_uri": null,
"state": null
}
Произошла попытка повторного обмена авторизационного кода:
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_grant",
"error_description": "The authorization code has already been used.",
"error_uri": null,
"state": null
}