Обмен авторизационного кода на маркер доступа
После получения авторизационного кода потребитель должен его обменять на маркер доступа.
Запрос
Потребитель отправляет 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 }