Как проверить, что пользователь прошел проверку подлинности с помощью учетных данных экрана блокировки
KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)
означает, что ключ в Android Key Store авторизуется только когда:
Пользователь проходит проверку подлинности, используя подмножество своих учетных данных для экрана блокировки (шаблон /PIN/ пароль, отпечаток пальца).
Если включено, UserNotAuthenticatedException
будет сгенерирован каждый раз, когда генерируется ключ или к хранилищу ключей обращаются, когда пользователь не аутентифицирован.
Существует ли вызов API для надежной проверки того, что пользователь действительно прошел аутентификацию до взаимодействия с хранилищем ключей?... вместо того, чтобы полагаться исключительно на перехват исключения после факта.
2 ответа
Android предоставляет возможность проверить это через KeyguardManager
Вот некоторый код Kotlin, чтобы помочь вам:
val kgManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
kgManager.isKeyguardSecure //true if the user set up their Lock Screen securely.
Нет такого API, вы должны перехватить исключение и обработать его, чтобы запросить аутентификацию пользователя при использовании шаблона /PIN/ пароля.
Одним из решений, нацеленных на API 23+ и использующих только отпечатки пальцев, является использование FingerprintManager
: https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager.html
У вас есть пример того, как использовать его там: