EDIT: По-видимому, это зависит от устройства. У меня есть один эмулятор, на котором это происходит, и тот, который работает так, как я ожидал. Хотелось бы получить универсальный ответ, но, возможно, его нет?
Переживание чего-то, что я считаю немного странным. Я создал AndroidKeyStore, который требует учетные данные пользователя. Поэтому, когда я пытаюсь зашифровать с помощью этого ключа, я получаю исключение «UserNotAuthenticatedException», идеально.
Затем я запускаю подтверждающие учетные данные устройства:
val keyguardManager = requireContext().getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
val intent = keyguardManager.createConfirmDeviceCredentialIntent(("Test"),"This is the description")
if (intent != null)
startActivityForResult(intent, AUTHENTICATION_REQUEST)
Это работает отлично, onActivityResult после разблокировки с помощью PIN-кода или отпечатка пальца я возвращаюсь в состояние успеха. Однако, когда я сейчас пытаюсь пойти и использовать хранилище ключей снова:
Если бы я использовал свой PIN-код на экране учетных данных, я могу использовать хранилище ключей без проблем.
Если я использовал свой отпечаток пальца на экране учетных данных, он снова выдает «UserNotAuthenticatedException». И я в принципе могу идти по бесконечному циклу с отпечатками пальцев. Я пропускаю настройку или что-то, что позволяет использовать отпечаток пальца? Я могу разблокировать телефон без проблем с отпечатком пальца, это просто хранилище ключей, через которое я не могу дозвониться.
val keyGenerator =
KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val builder = KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
builder.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setUserAuthenticationRequired(userAuthenticationRequired)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
builder.setUserAuthenticationValidityDurationSeconds(
userAuthenticationValidityDurationSeconds
)
keyGenerator.init(builder.build())
keyGenerator.generateKey()
Спасибо