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

Для приложений с серверной частью можно получить 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 – URL-адрес, на который будет перенаправлен конечный пользователь после аутентификации;

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

Все параметры имееют тип данных string.

Ответ

OpenID Провайдер сначала отправит конечного пользователя на страницу входа, чтобы пользователь мог ввести данные своей учетной записи и выдать разрешения на доступ к данным. После OpenID Провайдер перенаправит пользователя на URL-адрес, указанный в параметре redirect_uri, с временным кодом подтверждения code.

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

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

GET /connect/authorize
    ?response_type=code
    &client_id={{client_id}}
    &scope=openid extern.api
    &redirect_uri=http://www.example.com/
    &nonce=n-0S6_WzA2Mj
    &state=af0ifjsldkj HTTP/1.1
Host: identity.kontur.ru
Content-type: application/x-www-form-urlencoded

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

HTTP/1.1 302 Found
Location: https://www.example.com
    ?code=SplxlOBeZQQYbYS6WxSbIA
    &state=af0ifjsldkj
    &scope=openid extern.api

Получение 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;

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

Все параметры имеют тип данных string.

Ответ

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

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

POST /connect/token HTTP/1.1
Host: identity.kontur.ru
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
code=SplxlOBeZQQYbYS6WxSbIA
client_id={{client_id}}
client_secret={{client_secret}}
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"
}