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)
一起使用?
提前谢谢你, 马特
答案 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 在初始化期间,如果用户需要进行身份验证 继续进行。