Подтверждение операций
Примечание
Данный раздел содержит руководство разработчика по подтверждению операций на Сервисе Подписи с использованием v1 API DSS.
В разделе приведен общий подход при подтверждении операций.
В подтверждении операций задействованы следующие сервисы DSS:
Конечная точка | Сервис | Описание |
---|---|---|
https://<host>/<StsAppName>/oauth | Сервис Аутентификации. | Аутентификация пользователей для возможности обращений к Сервису Подписи |
https://<host>/<SignServerAppName>/rest/api | Сервис Подписи | Создание транзакций и получение результатов, подтвержденной операции |
https://<host>/<StsAppName>/confirmation | Сервис Подтверждения Операций | Подтверждение транзакций |
Подтверждены вторым фактором аутентификации могут быть операции требующие доступа к закрытому ключу. Список подтверждаемых операций - Коды операций
Последовательность шагов:
- Аутентификация пользователя
- Получение политики Сервиса Подписи (опционально)
- Создание транзакции на Сервисе Подписи
- Подтверждение транзакции на Сервисе Подтверждения Операций
- Получение результата операции на Сервисе Подписи
Получение Политики Сервиса Подписи
Для получения Политики Сервиса Подписи необходимо обратиться на конечную точку /policy.
Из Политики Сервиса Подписи можно получить:
- Список операций, требующих подтверждения
- Параметры создания запроса на сертификат
Список операций доступных пользователю содержится в структуре ActionPolicy. Элементами списка являются объекты вида:
Поле | Тип | Описание |
---|---|---|
DisplayName | string | Отображаемое имя операции |
Uri | string | Идентификатор операции |
Action | string | Имя операции |
MfaRequired | bool | Требование подтверждения операции |
Список имен операций приведен в разделе Коды операций
Примечание
Любую операцию на Сервисе Подписи можно выполнить с подтверждением вторым фактором аутентификации, даже если для данной операции не выставлено требование подтверждения.
Пример ActionPolicy
"ActionPolicy": [{
"DisplayName": "Выпуск маркера (вход в ЦИ)",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/issue",
"Action": "Issue",
"MfaRequired": false
}, {
"DisplayName": "Подпись документа",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/signdocument",
"Action": "SignDocument",
"MfaRequired": false
}, {
"DisplayName": "Подпись пакета документов",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/signdocuments",
"Action": "SignDocuments",
"MfaRequired": false
}, {
"DisplayName": "Расшифрование документа",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/decryptdocument",
"Action": "DecryptDocument",
"MfaRequired": false
}, {
"DisplayName": "Создание запроса на сертификат",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/createrequest",
"Action": "CreateRequest",
"MfaRequired": false
}, {
"DisplayName": "Смена пин-кода закрытого ключа",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/changepin",
"Action": "ChangePin",
"MfaRequired": false
}, {
"DisplayName": "Обновление сертификата",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/renewcertificate",
"Action": "RenewCertificate",
"MfaRequired": false
}, {
"DisplayName": "Отзыв сертификата",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/revokecertificate",
"Action": "RevokeCertificate",
"MfaRequired": false
}, {
"DisplayName": "Приостановление действия сертификата",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/holdcertificate",
"Action": "HoldCertificate",
"MfaRequired": false
}, {
"DisplayName": "Возобновление действия сертификата",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/unholdcertificate",
"Action": "UnholdCertificate",
"MfaRequired": false
}, {
"DisplayName": "Удаление сертификата",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/deletecertificate",
"Action": "DeleteCertificate",
"MfaRequired": false
}, {
"DisplayName": "Доступ к закрытому ключу",
"Uri": "http://dss.cryptopro.ru/identity/claims/action/privatekeyaccess",
"Action": "PrivateKeyAccess",
"MfaRequired": false
}
]
Создание транзакции
Для создания транзакции необходимо обратиться на конечную точку /transactions.
Список параметров, необходимый при создании транзакций приведен в разделе Параметры транзакций.
Результатом выполнения метода является идентификатор транзакции.
Его значение будет использовано на следующем шаге в процессе подтверждения транзакции (TransactionTokenId
).
Подтверждение транзакции
Для начала подтверждения транзакции необходимо отправить запрос на конечную точку /confirmation.
Для подтверждения транзакции, созданной на Сервисе Подписи, пользователь отправляет запрос, содержащий:
CallbackUri
- адрес для оповещения о завершении транзакции (опционально).TransactionTokenId
– идентификатор транзакции, созданной на Cервисе Подписи.Resource
– идентификатор Сервиса Подписи.ClientId
- идентификатор OAuth-клиента.ClientSecret
- пароль OAuth-клиента (для неконфиденциальных клиентов данный параметр не указывается).
В заголовке Authorization HTTP-запроса клиент должен указать токен, полученный на первом шаге:
Authorization: Bearer \<access_token>.
Примеры запроса
POST https://host/STS/confirmation HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJHM ... 5aPB98A3NAVduJbtz5Wti-H8CeXycwB6A
Content-Type: application/json; charset=utf-8
Host: host
Content-Length: 246
Expect: 100-continue
{
"Resource":"urn:cryptopro:dss:signserver:signserver",
"TransactionTokenId":"d5ebd393-e093-4aa8-bdcf-f5e497dc6b4d",
"CallbackUri":"http://clienthost/callback/",
"ClientId":"oauth_client"
}
При получении запроса Сервис Операций начнет процедуру подтверждения операции. Например, пользователю будте отправлено SMS с одноразовым паролем или придет Push-уведомление на мобильное устройство.
Пример ответа
Ответ Сервиса Подтверждения Операций содержит:
Поле | Описание |
---|---|
Challenge | Запрос на выполнение аутентификационного испытания |
AccessToken | Маркер доступа. Заполняется при IsFinal - true |
ExpiresIn | Время жизни AcessToken в секундах. Заполняется при IsFinal - true |
IsFinal | Является ли данный ответ последним в процессе подтверждения. |
IsError | Содержит ли данный ответ ошибку обработки запроса. Заполняется при IsFinal - false |
Error | Ошибка обработки запроса. Заполняется при IsFinal - false |
ErrorDescription | Подробное описание ошибки обработки запроса |
Поле Challenge
содержит:
Поле | Описание |
---|---|
Title | Текст, который вызывающая система может отобразить пользователю в своем интерфейсе |
TextChallenge | Дополнительные данные для подтверждения операции |
Содержимое поля TextChallenge
зависит от метода подтверждения (OTP-via-SMS, myDSS, и т.д.)
Примечание
RefId
- Идентификатор транзакции, созданной на Сервисе Подтверждения Операций.
Идентификатор необходимо будет использовать при последующих обращениях на конечную точку /confirmation.
Примечание
При обработке ответа Сервиса Подтверждения Операций вызывающее приложение должно смотреть на значение двух флагов:
IsFinal
и IsError
.
Если получен ответ с IsError
- true, то дальнейшее подтверждение транзакции не возможно.
Если получен ответ с IsFinal
- false, то подтверждение транзакции еще не завершено.
Дальнейшие действия пользователя зависят от метода подтверждения (OTP-via-SMS, myDSS, и т.д.)
Пример подтверждения операции через мобильное приложение myDSS смотреть здесь
Результатом подтверждения транзакции на Сервисе Подтверждения Операций является AccessToken, содержащий идентификатор подтвержденной транзакции.
Получение результата
Для получения результата операции необходимо вызвать метод соответствующий типу транзакции (см. таблицу ниже).
В заголовке Authorization HTTP-запроса клиент должен указать токен полученный на шаге "Подтверждение транзакции" Authorization: Bearer <access_token2>.
Примеры запроса
Тип транзакции | Код транзакции | Метод |
---|---|---|
SignDocument | 2 | /documents |
SignDocuments | 4 | /documents/packagesignature |
DecryptDocument | 8 | |
CreateRequest | 16 | /request |
ChangePin | 32 | |
RenewCertificate | 64 | |
RevokeCertificate | 128 | |
HoldCertificate | 256 | |
UnholdCertificate | 512 | |
DeleteCertificate | 1024 |
Примечание
Методы вызываются без параметров. Исключение составляют методы требующие ввода ПИН-код: подпись документа, подпись пакета документов.