Как проверить, что пользователь прошел проверку подлинности с помощью учетных данных экрана блокировки

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

У вас есть пример того, как использовать его там:

Другие вопросы по тегам