WebMoney

Обмен авторизационного кода на маркер доступа

После получения авторизационного кода потребитель должен его обменять на маркер доступа.

Запрос

Потребитель отправляет 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
}

Смотри также