Регистрация при помощи сертификата
Данный способ инициализации заключается в подтверждении учетной записи Пользователя и привязке к ней мобильного устройства при помощи самостоятельно полученного сертификата. Описание сценария инициализации приведено в подразделе 5.3 документа «ЖТЯИ.00118-01 96 01 КриптоПро Ключ. Общее описание».
Используемое API SDK
Policy.getParamsDSS – используется для проверки, разрешен ли сценарий.
Policy.getUserDevices() – актуализация данных о ключах аутентификации.
Auth.removeAuth() – удаление ключей аутентификации.
Пример последовательности вызовов для регистрации:
Ввод пользователем адреса сервера, локального имени УЗ ->
Policy_V2.shared.getParamsDSS -> Auth_V2.shared.normalInit -> Auth_V2.shared.confirm -> SigningKey_V2.shared.listExternalKeys ->
DSSCert_V2.shared.installCertificateExternal -> DSSPolicy_V2.shared.getUserDevices -> DSSAuth_V2.shared.verifyByCert
Примечание
Последовательность вызовов является приблизительной и может быть оптимизирована разработчиком мобильного приложения в соответствии с целевыми бизнес-требованиями.
Описание последовательности вызова методов
1. Для начала выполнения сценария необходимо получить URL-адрес сервера одним из следующих способов.
- Адрес может быть выбран из предопределенного списка серверов
- Пользователь может ввести адрес вручную
Адрес имеет следующий вид: https://[hostname]:[port]/[servicename].
2. Необходимо проверить, разрешен ли сценарий самостоятельной регистрации и регистрации по сертификату на выбранном сервере. Для этого необходимо получить настройки сервера.
- МП вызывает метод SDK
Policy.getParamsDSS; - SDK возвращает настройки сервера – paramsDSS;
- В настройках сервера необходимо проверить значение True флага
isRegistrationByCertificateSupported.
3. Если поддержка сценария регистрации по сертификату отключена (в paramsDSS -> isRegistrationByCertificateSupported = false), то сценарий завершается с ошибкой – «Регистрация по сертификату запрещена на сервере».
4. Из настроек сервера МП определяет доступные способы защиты ключей аутентификации:
- Без защиты
- Только пароль
- Пароль и биометрия
Для определения доступных способов защиты необходимо проверить параметры paramsDSS -> getKeyProtectionFlags():
- denyOSProtection - биометрические данные,
- passwordPolicy - парольная политика (информационное поле).
Требования к сложности пароля (passwordPolicy) приведены в разделе «Требования к паролю».
Если passwordPolicy = 0, то доступно сохранение ключей аутентификации без пароля.
Внимание!
Поле passwordPolicy в политике взаимодействия с сервером является информационным для удобства разработчика мобильного приложения.
Строгие значения парольной политики будут переданы во время создания на сервере ключей аутентификации. В случае последующего несовпадения
настроек мобильного приложения с ними, SDK выдаст ошибку.
Примечание
Мобильное приложение использует только два способа защиты – «Пароль», «Пароль и биометрия», то есть проверяет только значение параметра denyOSProtection.
5. МП запрашивает у пользователя имя учетной записи.
Примечание
Имя учетной записи используется только в мобильном приложении. Имя не передается на сервер. Имя используется как человекочитаемый идентификатор ключей аутентификации в мобильном приложении.
6. МП получает Push-адрес, который будет передан на сервер при регистрации.
7. МП отправляет на сервер запрос на регистрацию Auth.init().
После выполнения данного шага ключи аутентификации будут находиться в статусе Created.
8. МП подтверждает серверу успешное получение ключей аутентификации Auth.confirm().
После выполнения данного шага ключи аутентификации будут находиться в статусе Installed.
9. МП начинает процедуру установки сертификата, с помощью которого будет произведена инициализация устройства.
Для этого необходимо прочитать список сертификатов и ключей подписи на внешнем носителе listExternalKeys.
В случае обнаружения на носителе подходящих сертификатов МП устанавливает выбранный сертификат при помощи
installCertificateExternal. В процессе выполнения сертификат также будет установлен на сервер.
Примечание
После успешной установки сертификата в мобильное приложение и на сервер допустим "разрыв" сценария привязки с последующим возвращением к подтверждению привязки устройства.
10. Далее МП должно дождаться, когда ключи аутентификации будут привязаны к УЗ на сервере. После привязки к УЗ ключи аутентификации перейдут в статус NotVerified.
- Для проверки статуса ключей аутентификации необходимо обновить информацию о ключах аутентификации с помощью метода
Policy.getUserDevices. В полученном списке ключей аутентификации нужно найти ключи аутентификации МП поKID. - У найденного по
KIDобъекта DeviceInfo необходимо проверить полеgetState(). Если оно перешло в статус NotVerified, необходимо перейти к следующему шагу. - У найденного по
KIDобъекта DeviceInfo необходимо проверить полеsignatureRequired. Если оно имеет значение True, необходимо перейти к следующему шагу.
11. После того как устройство перешло в статус NotVerified и флаг signatureRequired взведен, необходимо подтвердить привязку устройства при помощи
метода verifyByCert. После данного вызова ключи аутентификации
перейдут в статус Active.
Статусы ключей аутентификации
| Статус | Отображаемое имя |
|---|---|
| Installed | Ожидает подтверждения Оператором/сертификатом |
| NotVerified | Ожидает подтверждения в приложении |
| NotVerified + isNonceRequired | Ожидает сканирования QR-кода |
| Active | Активный |
| Active + isDefault | Используется по умолчанию |
Примечание
Статус Created невозможен, так как методы Auth.init и Auth.confirm
вызываются последовательно. А в случае ошибки вызова метода Auth.confirm
ключи аутентификации удаляются.