setUserAuthenticationRequired(true)和setUserAuthenticationValidityDurationSeconds(X)时未捕获Android KeyPermanentlyInvalidatedException

时间:2017-05-19 14:50:18

标签: android exception fingerprint

Hello Android开发者,

当我一起使用指纹和AndroidKeystoreProvider时,我的应用程序中出现了一些奇怪的东西。

情况如下:

我使用KeyPairGenerator创建一个KeyPair。 在构建器中,我设置了setUserAuthenticationRequired(true)setUserAuthenticationValidityDurationSeconds(10)

在我的指纹中,我已经注册了3个手指。

当我第一次尝试使用initSign(...)初始化签名算法时,会捕获 UserNotAuthenticatedException 。这很公平。 (https://developer.android.com/reference/android/security/keystore/UserNotAuthenticatedException.html

然后我将一根新手指放入我的指纹中。

所以我预计,当我启动签名算法时,它应该捕获 KeyPermanentlyInvalidatedException ,如Google文档(https://developer.android.com/reference/android/security/keystore/KeyPermanentlyInvalidatedException.html)中所述,但事实并非如此。 UserNotAuthenticatedException 总是被捕获。

如果我移除setUserAuthenticationValidityDurationSeconds(10)事情会按预期工作。 ( KeyPermanentlyInvalidatedException 很容易被捕获)

您是否知道是否有办法让这两个例外与setUserAuthenticationRequired(true)setUserAuthenticationValidityDurationSeconds(10)一起使用?

提前谢谢你, 马特

1 个答案:

答案 0 :(得分:1)

不,KeyPermanentlyInvalidatedException>时不会抛出setUserAuthenticationValidityDurationSeconds -1

来自setUserAuthenticationValidityDurationSeconds文档:

Parameters: seconds int: duration in seconds or -1 if user authentication must take place for every use of the key

setUserAuthenticationRequired

Additionally, if the key requires that user authentication takes place for every use of the key, it is also irreversibly invalidated once a new fingerprint is enrolled

更新(26.11.2018)

如果KeyPermanentlyInvalidatedException

setUserAuthenticationValidityDurationSeconds > -1将不会被抛出,因为:

  

涉及授权的密钥的加密操作   用户身份验证成功后,用于持续时间   事件只能使用安全锁屏身份验证。这些   加密操作将抛出UserNotAuthenticatedException   在初始化期间,如果用户需要进行身份验证   继续进行。

来源:https://developer.android.com/reference/android/security/keystore/KeyProtection.Builder#setUserAuthenticationValidityDurationSeconds(int)