Samsung Devices OS 9.0 выдает «android.security.KeyStoreException: ключевой пользователь не аутентифицирован», когда «Предпочитаемая биометрия» - это «Распознавание лиц» - PullRequest
0 голосов
/ 08 февраля 2019

Мы внедрили новый android.hardware.biometrics.BiometricPrompt, заменив существующий android.hardware.fingerprint.Новый API-интерфейс биометрии работает должным образом до тех пор, пока мы не получим «Предпочитаемую биометрию» как «Отпечаток пальца».

Когда мы установим «Предпочитаемую биометрию» как «Распознавание лица» и попытаемся использовать распознавание лица в качестве механизма аутентификациидля нашего приложения мы получаем «java.security.SignatureException: android.security.KeyStoreException: ключевой пользователь не аутентифицирован» в onAuthenticationSucceeded (результат BiometricPrompt.AuthenticationResult).

Эта проблема, кажется, воспроизводима на устройствах Samsung с Android P. Она отлично работает на устройствах Pixel с Android P (я полагаю, что в настоящее время устройство Pixel не обеспечивает поддержку распознавания лиц для сторонних приложений).

private BiometricPrompt.AuthenticationCallback getAuthenticationCallback() {


@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
    Log.i(TAG, "onAuthenticationSucceeded");
    super.onAuthenticationSucceeded(result);
    Signature signature = result.getCryptoObject().getSignature();
    try {
      //Exception is thrown when we try to update the Signature with our message.
      signature.update(mToBeSignedMessage.getBytes());
      String signatureString = Base64.encodeToString(signature.sign(), Base64.URL_SAFE);
      Log.i(TAG, "Message: " + mToBeSignedMessage);
      Log.i(TAG, "Signature (Base64 EncodeD): " + signatureString);
      Toast.makeText(getApplicationContext(), mToBeSignedMessage + ":" + signatureString, Toast.LENGTH_SHORT).show();
    } catch (SignatureException e) {
      Log.d(TAG, e.getLocalizedMessage());
//java.security.SignatureException: android.security.KeyStoreException: Key user not authenticated"
      }
    }
}

Почему я получаю «KeyStoreException: Ключевой пользователь не аутентифицирован», при попытке обновить значение подписи ТОЛЬКО когда «Предпочитаемая биометрическая» как «Распознавание лиц».

...