Регистрация при помощи сертификата
Примечание
Совокупность ключей аутентификации, устанавливаемых на устройство пользователя, для удобства упоминания может быть названа в описании процесса вектором аутентификации (ВА).
Данный способ инициализации заключается в подтверждении учетной записи Пользователя и привязке к ней мобильного устройства при помощи самостоятельно полученного сертификата и обладает следующими особенностями:
- необходима предварительная регистрация мобильного устройства Пользователя;
- визит к Оператору КриптоПро Ключ необязателен при использовании квалифицированного сертификата;
- уникальный идентификатор вектора аутентификации не используется;
- QR-код для привязки мобильного устройства не используется.
Пользователь из мобильного приложения на базе Ключ SDK отправляет запрос на регистрацию мобильного устройства в КриптоПро Ключ. В ответ КриптоПро Ключ отправляет в мобильное приложение Пользователя на базе Ключ SDK вектор аутентификации. Полученные данные сохраняются в мобильном приложении, Пользователь может защитить ВА с помощью ПИН-кода.
Далее Пользователь предъявляет в мобильном приложении полученный им ранее сертификат. В случае если сертификат отсутствует, возможно создание запроса на сертификат в процессе инициализации мобильного устройства. Если установленный сертификат является квалифицированным, Оператор КриптоПро Ключ на основании информации из сертификата может идентифицировать владельца соответствующего ключа подписи.
Сведения об учетной записи Пользователя заполняются из установленного сертификата. Пользователю следует подтвердить данные учетной записи в мобильном приложении на своем мобильном устройстве. Подтверждение данных учетной записи может быть инициировано Пользователем или мобильным приложением.
Для подтверждения учетной записи мобильное приложение отображает Пользователю сведения об учетной записи и предоставляет возможность подтвердить их или отказаться. Привязка мобильного устройства Пользователя к учетной записи будет завершена после получения подтверждения. Если Пользователь не согласился с полученными учетными данными, ему следует отказаться от их подтверждения и обратиться к Оператору. Если учетная запись Пользователя уже существует, то новый сертификат и мобильное устройство могут быть привязаны к ней автоматически.
Используемое 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 флага
isSelfRegistrationEnabled
.
3. Если самостоятельная регистрация отключена (в paramsDSS -> isSelfRegistrationEnabled = 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
ключи аутентификации удаляются.