当“首选生物特征”为“面部识别”时,三星设备OS 9.0抛出“ android.security.KeyStoreException:密钥用户未通过身份验证”

时间:2019-02-08 19:04:44

标签: android samsung-mobile biometrics samsung-galaxy

我们实现了新的android.hardware.biometrics.BiometricPrompt,取代了现有的android.hardware.fingerprint。 在我们将“首选生物特征”称为“指纹”之前,新的生物特征API会按预期工作。

当我们将“首选生物特征”设置为“面部识别”并尝试使用面部识别作为应用程序的身份验证机制时,我们收到“ java.security.SignatureException:android.security.KeyStoreException:关键用户未通过身份验证在onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult结果)中。

此问题似乎可以在使用Android P的三星设备中重现。在使用Android P的Pixel设备中也可以正常工作(我相信当前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:密钥用户未通过身份验证”。

0 个答案:

没有答案