Аутентификация по коду подтверждения

Для приложений с серверной частью можно получить Access Token с помощью authorization code flow.

Конечный пользователь использует свою учетную запись Контура для аутентификации и выдает разрешение на доступ к выбранным данным. После получения разрешений, приложение отправляет запрос в API Контур.Экстерна.

Алгоритм аутентификации

Аутентификация выполняется в два этапа:

  1. Получение authorization code.

  2. Получение Access Token.

Получение authorization code

Для получения authorization code отправьте запрос.

Метод: GET AuthorizationEndpoint.

Примечание

В документации Контур.API пока не реализован метод GET AuthorizationEndpoint. Рекомендуем использовать коллекцию Postman для запросов.

Параметры запроса

Content-type: application/x-www-form-urlencoded

  • response_type – ответ, который нужно получить от OpenID Провайдера. Укажите значение: code;

  • client_id – сервисное имя, выдается вместе с api-key;

  • scope – область действия токена. Укажите следующие значения через пробел: openid extern.api;

  • redirect_uri – ссылка, на которую будет перенаправлен конечный пользователь после аутентификации;

  • nonce – строка для удостоверения, что запрос связан с будущим Access Token. Данная строка вернется при получении Access Token.

Ответ

OpenID Провайдер перенаправит пользователя на адрес, указанный в параметре redirect_uri, с кодом подтверждения code.

Подробнее про получение authoriztion code смотрите в документации OpenID Провайдера.

Пример запроса

http://identity.testkontur.ru/connect/authorize?
response_type=code
&scope=openid extern.api
&client_id=yourClientId
&redirect_uri=http://www.example.com/
&state=af0ifjsldkj
&nonce=n-0S6_WzA2Mj

Получение Access Token

Полученный код подтверждения нужно обменять на Access Token.

Метод: POST TokenEndpoint.

Параметры запроса

Content-type: application/x-www-form-urlencoded

  • grant_type – тип аутентификации. Укажите значение: authorization_code;

  • code – код подтверждения;

  • client_id – сервисное имя, выдается вместе с api-key;

  • client_secret – api-key;

  • riderect_uri – ссылка, на которую получен код подтверждения.

Ответ

OpenID Провайдер вернет в ответ Access Token.

Пример запроса

POST /token
Content-type: application/x-www-form-urlencoded

grant_type=authorization_code
code=SplxlOBeZQQYbYS6WxSbIA
client_id=yourClientId
client_secret=yourClientSecret
redirect_uri=http://www.example.com

Пример ответа

200 OK
Content-type: application/json

{
    "access_token": "AAAAAAAAAAAAAAAAA",
    "token_type": "Bearer",
    "expires_in": 3600,
    "id_token": "eyJhbGciOifQ.ewogI3pAKfQ.ggW8hq-rvKMzqg"
}