Сервисный OAuth-клиент
В случае если интегрируемая система не предусматривает интерактивного взаимодействия с пользователем для получения учётных данных или не хранит учётные данные, то взаимодействие с DSS может быть реализовано по схеме Сервис-Сервис.
В схеме Cервис-Сервис не требуется аутентификация пользователя, необходима лишь аутентификация сторонней системы. Аутентификация сторонней системы может быть осуществлена двумя способами:
При использовании данной схемы сторонняя система может вызывать API DSS от имени пользователя.
Примечание
Сервисный Oauth-клиент не позволяет выполнить действия, требующие двухфакторной аутентификации, без подтверждения пользователя. Исключение составляет операция подтверждения входа.
Ограничения
При работе по схеме Сервис-Сервис на сценарий аутентификации накладывается ряд ограничений. Для того, чтобы сторонняя система смогла корректно работать в рамках данной схемы, необходимо следующее:
- Запрос на авторизацию должен проходить по сценарию
Пароль (password)
илиОбмен токена (Token Exchange)
; - Клиент должен быть конфиденциальным, то есть обладать назначенным ему секретом.
Примечание
При выполнении сценариев аутентификации, отличных от описанных выше, данный клиент работает в соответствии со спецификацией.
Регистрация
Для регистрации клиента в режиме сервисного необходимо воспользоваться командлетом Add-DssClient
с параметром SuppressAuthForIssue
, а также параметром GenerateSecret
для регистрации конфиденциального клиента.
Пример команды:
Add-DssClient -Identifier test_id -Name testId -AllowedFlow ResourceOwner -GenerateSecret -SuppressAuthForIssue 1
Для изменения режима работы существующего клиента необходимо сделать следующее:
- Выполнить назначение секрета модифицируемому клиенту при помощи командлета
Add-DssClientSecret
.
Пример команды:
Add-DssClientSecret -ClientId test_id -Type SharedSecret -Value 12345
Примечание
В случае, если клиент уже является конфиденциальным, данный шаг можно пропустить.
- Задать параметр
SuppresAuthForIssue
Oauth-клиента в значениеtrue
посредством командлета PowerShellSet-DssClientSecret
.
Пример команды:
Set-DssClient -ClientId test_id -SuppressAuthForIssue 1
Примеры
В данном примере использован метод аутентификации сторонней системы по паролю.
Пример запроса на аутентификацию:
POST /STS/oauth/token HTTP/1.1
Host: grand-pc
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdF9pZDoxMjM0NQ==
grant_type=password&username=Test1&resource=urn%3Acryptopro%3Adss%3Asignserver%3ASignServer&password=
Примечание
Несмотря на то, что пароль пользователя не проверяется, параметр password
должен обязательно присутствовать в запросе.
Пример ответа:
{
"access_token": "eyJ0eXAiOiJK...",
"expires_in": 300,
"token_type": "Bearer"
}