Аутентификация в SOAP-сервисах приложения для неинтерактивных пользователей

Если пользователь представляет собой не человека, а внешнюю информационную систему, то для аутентификации используются токены доступа. Например, внешняя программа вызывает SOAP-сервис, существующий в приложении.

Чтобы предоставить права на ресурсы приложения внешней программе, нужно установить связь между внешней программой и пользователем приложения. В большинстве случаев мы рекомендуем создавать отдельных служебных пользователей для внешних программ.

Пусть в приложении есть SOAP-сервис и пользователь, обладающий правом вызова этого сервиса.

Сначала, один раз, необходимо в приложении получить ключ доступа для этого пользователя.

После этого при каждом вызове SOAP-сервиса внешняя программа должна отправить запрос на получение токена аутентификации по адресу:

http://serverhost:port/applications/{app}/sys/token

Получение токена выполняется с проверкой прав работы пользователя в приложении с помощью токенов.

Формат запроса для получения токена:

POST <URL>
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <Base64(ClientId:ClientSecret)>

grant_type=CLIENT_CREDENTIALS

На встроенном языке этот же запрос может выглядеть следующим образом:

исп Ответ = КлиентHttp.ЗапросPost(<URL>)
    .ДобавитьЗаголовок("Content-Type", "application/x-www-form-urlencoded")
    .ДобавитьЗаголовок("Authorization", "Basic " + Кодировка.Base64.КодироватьВСтроку("N1_e1NvnB33xjB7IrZCqJT2WHOyR0Ew58vedLLQxXwE=:zd9QHBC_D9Jmurubko7xB97eJqCAQjJk5lNYp7Ny4s4="))
    .УстановитьТело("grant_type=CLIENT_CREDENTIALS")
    .Выполнить()

В случае успешного получения токена внешняя программа получит ответ в формате JSON:

{
    "id_token": "<сериализованный токен аутентификации>",
    "token_type": "Bearer"
}

После того как токен получен, можно вызывать SOAP-сервис из приложения. Для этого в запрос нужно добавить заголовок Authorization:

Authorization: Bearer <токен, полученный от менеджера аутентификации>

Токен действителен в течение часа, поэтому если нужно сделать сразу несколько вызовов (возможно разных сервисов), то можно использовать уже полученный токен, не получая его заново.

Если токен устарел, то при вызове SOAP-сервиса вернется ответ с кодом 401. Это значит, что нужно снова запросить токен аутентификации.