You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BiometricPrompt认证成功后Cipher.init抛出UserNotAuthenticatedException原因排查

可能触发该问题的开发环境变动原因

  • Android Gradle Plugin(AGP)版本升级
    新版AGP默认启用的R8优化/混淆规则可能误剪裁Android安全库相关类的元信息,或是篡改KeyGenParameterSpec构建时传入的userAuthenticationValidityDurationSeconds等参数值,导致密钥实际未按预期配置时效规则,即使在认证有效期内调用cipher.init也无法通过校验。如果未显式配置Android Keystore、BiometricPrompt相关类的保留规则,升级AGP后极容易触发该问题。
  • Biometric认证依赖库隐性升级
    若项目中生物认证依赖使用了动态版本声明(如androidx.biometric:biometric:1.+),Gradle同步时会自动拉取最新版库。1.2.0及更高版本的Biometric库调整了「允许回退到设备凭据」场景下的授权传递逻辑:通过设备凭据完成认证后,不再默认给配置了时效的密钥授权,仅生物认证的授权结果会被正常传递到Keystore校验环节。
  • compileSdk/targetSdk版本被动升高
    更新Android Studio后同步项目时,可能被默认升级compileSdk到33及以上版本。高API级别的Android Keystore收紧了密钥授权校验逻辑:userAuthenticationValidityDurationSeconds生效要求认证会话和密钥生成的上下文严格匹配,此前低版本中允许的宽松校验逻辑不再生效。
  • 项目JDK版本升级
    若调整了项目使用的JDK版本到11或17,部分旧版Android Keystore交互逻辑在高版本JDK编译下会出现参数序列化异常,导致密钥生成时的用户认证相关配置未正确写入系统Keystore,最终触发授权校验失败。
  • 应用自动备份被默认开启
    新版AGP会默认开启android:allowBackup="true"配置,如果在不同设备/模拟器间同步安装应用,绑定了原设备的Keystore密钥会被备份恢复,而跨设备恢复的密钥会永久失效,无论是否完成认证都会抛出UserNotAuthenticatedException。

内容的提问来源于stack exchange,提问作者Aldinjo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:24:00