Регистрация мобильного приложения на базе КриптоПро Ключ SDK
Регистрация мобильного приложения (МП) необходима для получения доступа ко всем функциям МП (подпись, подтверждение операций, управление сертификатами) и заключается в выполнении следующих шагов:
- получить с сервера ключи аутентификации,
- перевести ключи аутентификации в состояние «Активный» .
Общие сведения
Ключи аутентификации представляют собой ключи ГОСТ Р 28147-89, которые передаются с сервера и сохраняются в мобильном приложении (МП).
Ключи аутентификации используются для аутентификации запросов МП к серверу и обладают следующими свойствами:
- идентифицируются по key identifier (
KID
); - имеют ограниченный срок действия;
- имеют Статус (
State
); - привязаны к учетной записи (УЗ) пользователя на сервере;
- хранятся в МП и зашифрованы на пароле (ПИН-коде), придуманным пользователем.
МП с сервера получает следующую пару ключей аутентификации:
• Kauth
– ключ аутентификации запросов МП к серверу DSS
• Kconf
– ключ подтверждения операций.
Использование ключа Kauth
или Kconf
зависит от типа запроса МП к серверу.
Статус (State
) ключа аутентификации определяет действия, доступные с ключами аутентификации.
В МП может храниться несколько ключей аутентификации – как для разных УЗ на разных серверах,
так и для разных УЗ на одном сервере.
Допустимо получить несколько ключей аутентификации для одной УЗ пользователя.
Используемое API SDK
Policy.getParamsDSS
– получение настроек сервера.Auth.getAuthList()
– получение списка ключей аутентификации, сохраненных на устройстве. Метод использует только локальные данные SDK без обращения на сервер. Локальные данные могут отличаться от данных, хранимых на сервере. Для актуализации данных необходимо вызвать методPolicy.getUserDevices()
.Policy.getUserDevices()
– получение списка устройств, привязанных к учетной записи пользователя на сервере. Метод получает актуальный список устройств пользователя, содержащий актуальные данные, статусу устройств.Auth.scanQR()
– сканирование QR-кода.Auth.init()
– отправка запроса на онлайн-регистрацию.Auth.confirm()
– подтверждение серверу успешного получения ключей аутентификации.Auth.verify()
– подтверждение привязки.Auth.kinit()
– регистрация по QR-коду.Auth.removeAuth()
– удаление ключей аутентификации.Auth.addNewDevice()
– запрос на добавление нового устройства.Auth.checkStatus()
– проверка статуса добавления нового устройства и/или отображение QR-кода для одобрения нового устройства.Auth.confirmNewDevice()
– добавление нового устройства.
После вызова методов normalInit()
, kinit()
, addNewDevice()
на устройстве пользователя
сохраняются ключи аутентификации. Список сохраненных ключей можно получить, вызвав метод
Auth.getAuthList()
. Актуализировать статус ключей аутентификации можно, вызвав метод
Policy.getUserDevices()
.
Методы регистрации normalInit()
, kinit()
, addNewDevice()
одним из параметров
принимают тип защиты ключей аутентификации (без пароля, пароль, пароль + биометрия).
Доступные способы защиты ключей аутентификации определяются из настроек сервера
Policy.getParamsDSS: paramsDSS-> getKeyProtectionFlags(
).
Вызовы init()
, kinit()
, addNewDevice()
, confirm()
, verify()
,
confirmNewDevice()
, checkStatus()
могут быть выполнены в разные моменты времени.
Для вызова методов confirm()
, verify()
, confirmNewDevice()
, checkStatus()
ключи аутентификации должны находиться в соответствующем статусе:
• confirm()
– Created
• verify()
– NotVerified
• confirmNewDevice()
– ApproveRequired
• checkStatus()
– ApproveRequired
Для актуализации статуса ключей аутентификации необходимо вызвать метод getUserDevices
.
В полученном списке ключей аутентификации необходимо по KID
найти нужно устройство и
проверить его статус. В зависимости от статуса ключей аутентификации определяется доступное
действие.
Примечание
Метод getUserDevices
возвращает все устройства пользователя, включая устройство,
делавшее запрос. В ряде случаев может потребоваться отфильтровать из списка текущее
устройство. Это можно сделать по KID
.
Вызов методов init()
, kinit()
, addNewDevice()
, confirm()
, verify()
,
confirmNewDevice()
переводит ключи аутентификации в новый статус:
init()
- Createdkinit()
- CreatedaddNewDevice()
- Createdconfirm()
:- Created -> Installed (в сценарии анонимной-регистрации с уникальным идентификатором)
- Created -> NotVerified (в сценарии с QR-кодом)
- Created -> ApproveRequired (в сценарии добавления нового устройства)
verify()
- NotVerified -> ActiveconfirmNewDevice()
- ApproveRequired -> Active
Вызовы методов confirm()
, verify()
, confirmNewDevice()
, checkStatus()
одним из параметров принимают идентификатор ключей аутентификации (KID). Получить данный идентификатор МП может при помощи вызова Auth.getAuthList().
Способы регистрации мобильного приложения на базе КриптоПро Ключ SDK
Поддерживаются следующие сценарии регистрации:
- Анонимная регистрация (с уникальным идентификатором)
- с QR-кодом подтверждения
- без QR-кода подтверждения
- по сертификату
- QR-код
- с кодом активации
- без кода активации
- Через существующее устройство