12、Android 10 强生物识别:BIOMETRIC_STRONG vs BIOMETRIC_WEAK、设备凭据回退、allowDeviceCredential参数
好,咱们今天聊点硬核的。Android 10 在生物识别这块,其实做了一次比较大的「分层」。说白了,就是告诉开发者:指纹也有三六九等,你得知道怎么用。
我刚开始接触 Android 10 的生物识别 API 时,也有点懵。什么强生物识别、弱生物识别,还有设备凭据回退…… 嗯,别急,咱们一个一个拆开讲。
BIOMETRIC_STRONG vs BIOMETRIC_WEAK:到底差在哪?
先问一个问题:你手机上的指纹识别,和支付宝的指纹支付,用的是同一个指纹吗?
从硬件角度看,可能是同一个。但从系统安全等级看,不一定。
Android 10 把生物识别分成了两个等级:
- BIOMETRIC_STRONG:符合 Android 强生物识别要求,通过了 Android 兼容性定义文档(CDD)的严格测试。说白了,就是硬件级的安全,密钥存储在 TEE(可信执行环境)或更高安全级别的芯片中。
- BIOMETRIC_WEAK:安全性相对较低,可能是软件层面的识别,或者硬件安全等级不够。比如一些低端手机的指纹、2D 人脸识别,都属于这一类。
我个人的习惯是:涉及支付、登录、敏感数据解密,必须用 BIOMETRIC_STRONG。普通的应用解锁、个性化推荐,用 BIOMETRIC_WEAK 就够了。
核心区别一句话:STRONG 是硬件级安全,WEAK 是软件级或低硬件安全。前者能用于加密操作,后者只能用于 UI 解锁。
设备凭据回退:用户忘了指纹怎么办?
你想想看,用户设置了指纹解锁,但某天手指脱皮了、沾水了,或者就是不想用指纹了。这时候怎么办?
Android 10 提供了一个机制:设备凭据回退。也就是当生物识别失败或不可用时,允许用户用 PIN 码、图案或密码来替代。
我在项目中遇到过这种情况:用户连续 5 次指纹识别失败,系统直接锁定了生物识别。如果没有设备凭据回退,用户就只能干瞪眼。所以,我建议所有涉及生物识别的应用,都加上这个回退机制。
allowDeviceCredential 参数:怎么开启回退?
这个参数是 BiometricPrompt 的 Builder 中的一个选项。看代码:
// 创建 BiometricPrompt 实例
BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(context)
.setTitle("验证指纹")
.setSubtitle("请触摸指纹传感器")
.setDescription("使用指纹或设备密码验证身份")
.setAllowedAuthenticators(
BiometricManager.Authenticators.BIOMETRIC_STRONG
| BiometricManager.Authenticators.DEVICE_CREDENTIAL
)
.build();
// 启动认证
biometricPrompt.authenticate(
new BiometricPrompt.CryptoObject(cipher),
cancellationSignal,
authenticationCallback
);
注意看 setAllowedAuthenticators 方法。这里传了两个值:
BIOMETRIC_STRONG:允许使用强生物识别DEVICE_CREDENTIAL:允许使用设备凭据(PIN/图案/密码)
这两个用「或」操作符连接,表示「只要满足其中一个就行」。
小技巧:如果你只传了 BIOMETRIC_STRONG,系统不会弹出设备凭据回退选项。用户指纹失败后,只能重试或取消。所以,想要回退功能,必须加上 DEVICE_CREDENTIAL。
三种认证方式的对比
为了方便你理解,我整理了一个表格:
| 认证方式 | 安全等级 | 典型场景 | 是否需要硬件支持 |
|---|---|---|---|
| BIOMETRIC_STRONG | 高 | 支付、敏感数据解密 | 是(TEE/安全芯片) |
| BIOMETRIC_WEAK | 低 | 应用解锁、个性化推荐 | 否(软件即可) |
| DEVICE_CREDENTIAL | 中 | 生物识别失败时的回退 | 否(系统级) |
我曾经踩过的坑
嗯,这里分享一个真实案例。有一次,我在做一款金融类 App,要求必须用强生物识别。我直接用了 BIOMETRIC_STRONG,没加 DEVICE_CREDENTIAL。
结果测试反馈:用户手机不支持强生物识别(比如一些老款手机),直接弹了个错误提示,连回退选项都没有。用户只能干瞪眼。
后来我改成了:
.setAllowedAuthenticators(
BiometricManager.Authenticators.BIOMETRIC_STRONG
| BiometricManager.Authenticators.DEVICE_CREDENTIAL
)
这样,即使手机不支持强生物识别,用户也能用 PIN 码或密码完成认证。用户体验好了很多。
注意:如果你同时传了 BIOMETRIC_WEAK 和 DEVICE_CREDENTIAL,系统会优先尝试生物识别。如果生物识别失败或不可用,才会弹出设备凭据界面。这个顺序是系统控制的,开发者无法干预。
知识体系结构图
下面这张图,帮你理清 Android 10 生物识别的核心逻辑:
总结一下
Android 10 的生物识别,说白了就是给了开发者一把「安全尺子」。你可以根据业务需求,选择不同等级的认证方式。
- BIOMETRIC_STRONG:安全第一,适合金融、支付类场景
- BIOMETRIC_WEAK:方便快捷,适合非敏感场景
- DEVICE_CREDENTIAL:兜底方案,保证用户体验
我个人建议:能用 STRONG 就用 STRONG,但一定要加上 DEVICE_CREDENTIAL 作为回退。这样既保证了安全,又不会把用户卡死。
好了,这一节的内容就到这。记住,生物识别不是「有就行」,而是「用对才行」。
公众号:蓝海资料掘金营,微信deep3321