Аутентификация через Client Credentials Flow

Для взаимодействия между сервисами можно получить Access Token с помощью Client Credentials Flow. Это полезно в случаях, когда информационная система по расписанию отправляет документы в API или получает их статусы. Аутентификация выполняется от имени приложения с использованием его учетных данных. Участие пользователя для получения токена не требуется.

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

Получение Access Token

Перед началом работы получите api-key и service_name приложения. Для получения токена отправьте запрос. Метод: POST /connect/token.

Адрес запроса зависит от площадки OpenID-провайдера. Используйте реквизиты приложения, выданные для выбранной площадки.

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

Все параметры обязательные. Передавайте их в теле запроса с заголовком Content-Type: application/x-www-form-urlencoded.

  • grant_type — тип аутентификации. Укажите значение client_credentials;

  • client_id — сервисное имя, выдается вместе с api-key. Максимальная длина — 300 символов;

  • client_secret — API-ключ приложения. Максимальная длина — 300 символов;

  • scope — разрешения API, которые запрашивает приложение. Несколько значений укажите через пробел.

В scope можно передавать только разрешения API, доступные приложению. Пользовательские scope, например openid, profile и email, передавать нельзя. Доступ к scope выдают владельцы API в Контур.Интеграторе. Подробнее смотрите в описании параметров Client Credentials Flow.

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

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

grant_type=client_credentials&client_id={{service_name}}&client_secret={{api_key}}&scope={{scope}}

Замените {{service_name}}, {{api_key}} и {{scope}} реквизитами приложения. Передавайте значения параметров в формате application/x-www-form-urlencoded.

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

При успешной аутентификации OpenID-провайдер вернет HTTP 200 и JSON с токеном.

{
  "access_token": "example_access_token",
  "token_type": "Bearer",
  "expires_in": 3600
}

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

  • access_token — токен доступа;

  • token_type — тип токена. Всегда имеет значение Bearer;

  • expires_in — срок действия токена в секундах.

Значение 3600 приведено для примера. Используйте срок, который вернул OpenID-провайдер.

Использование токена

При вызове методов API передавайте токен в HTTP-заголовке Authorization, как описано в разделе об аутентификации:

Authorization: Bearer <access_token>

Используйте токен в течение его срока действия. Чтобы получить новый токен, повторите запрос с grant_type=client_credentials, сервисным именем и API-ключом.

Возможные ошибки

Если получить токен не удалось, OpenID-провайдер вернет JSON с полем error. В документации Client Credentials Flow описаны следующие ошибки:

HTTP-код

error

Причина

400

invalid_request

Ошибка в составе или формате запроса.

400

invalid_client

Не указаны либо неверны client_id или client_secret.

400

invalid_scope

Запрошенные scope некорректны или не подходят для выбранной схемы.

Пример ответа с ошибкой

{
  "error": "invalid_client"
}