解密指纹和面容认证的实现方法
科幻电影一直是人们津津乐道的话题,其中不乏一些经典场面,让观众为之震惊赞叹,例如《钢铁侠》中的悬浮虚拟触摸屏、《碟中谍》中的指纹虹膜识别等。如今,这些看似高大上的科技也走进了我们的日常生活,像指纹与面容识别,其应用已经极为普遍与广泛。
当今社会对个人隐私的保护越来越重视,对App的安全性也提出了更高的要求,具备私密性与独特性的指纹与面容识别,就成为了强有力的保障。当用户在解锁设备、支付、文件访问时,利用指纹或者面容认证,这在很大程度上减少了帐号盗取、信息泄露的风险。
华为线上快速身份验证服务(FIDO)提供了相关功能:开放基于WebAuthn标准的FIDO2客户端能力,提供本地指纹、面容认证开放能力,为应用提供安全可信的本地生物特征认证和安全便捷的线上快速身份验证能力。其优势在于通过系统完整性检测和密钥校验机制保证结果安全可信,通用的无密码用户身份验证方案,易与现有帐号基础设施集成。接下来,为大家说明如何集成指纹和面容认证能力。
主要的接入步骤如下:
1. 配置AppGallery Connect
2. 集成HMS Core SDK
3. 集成本地生物认证能力
步骤1、2可以参考超链接中的指导进行完成,这里不做赘述。
需要注意的是步骤2中提供了两种本地生物认证的SDK:
Bioauthn-AndroidX
implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'
Bioauthn
implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'
这两个SDK对外表现的能力略有不同。主要表现在BioAuthn-AndroidX SDK的指纹认证能力提供统一界面,不需要应用自己绘制指纹认证提示界面;BioAuthn SDK的指纹认证能力不提供统一界面,需要应用自己绘制指纹认证提示界面。
可以参考官网FAQ中的说明:
这次我们主要介绍Bioauthn-AndroidX的集成,Demo可以在这里下载
集成本地生物认证能力
注意:1. 请保证手机没有root过,不然无法使用指纹和面容能力2. 测试前请先保证手机中已经有相应的指纹和面容信息,否则会报相关的错误码。可以在设置-生物识别和密码-指纹/人脸识别中添加相关指纹和面容
指纹认证
使用指纹认证分为两步:
1. 初始化BioAuthnPrompt对象,代码如下:
BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { showResult("指纹认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString); } @Override public void onAuthSucceeded(BioAuthnResult result) { showResult("指纹认证成功. CryptoObject=" + result.getCryptoObject()); } @Override public void onAuthFailed() { showResult("指纹认证失败."); } });
2. 创建提示信息,并进行认证。
// 自定义设置信息 BioAuthnPrompt.PromptInfo.Builder builder = new BioAuthnPrompt.PromptInfo.Builder().setTitle("主标题") .setSubtitle("副标题") .setDescription("内容描述"); //允许使用其他认证方式 builder.setDeviceCredentialAllowed(true); BioAuthnPrompt.PromptInfo info = builder.build(); //进行认证 bioAuthnPrompt.auth(info);
配置完成后就可以进行指纹认证了,认证页面如下:
面容认证
面容认证的限制条件比较多,具体请参考FAQ:
1. 检查是否有相机权限(EMUI10.1及以后版本不需要相机权限)
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { showResult("请先申请相机权限"); ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, 1); return; }
2. 检查当前设备是否支持人脸识别
FaceManager faceManager = new FaceManager(this); int errorCode = faceManager.canAuth(); if (errorCode != 0) { resultTextView.setText(""); showResult("不支持人脸识别. errorCode=" + errorCode); return; }
3. 进行人脸认证
int flags = 0; Handler handler = null; CryptoObject crypto = null; faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { showResult("认证报错. errorCode=" + errMsgId + ",errorMessage=" + errString + (errMsgId == 1012 ? " 没有相机权限." : "")); } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { showResult("返回识别过程中提示信息. helpMsgId=" + helpMsgId + ",helpString=" + helpString + "\n"); } @Override public void onAuthSucceeded(BioAuthnResult result) { showResult("认证成功. CryptoObject=" + result.getCryptoObject()); } @Override public void onAuthFailed() { showResult("认证失败."); } }, handler);
这样人脸识别的代码就完成了,调用后就会进行人脸认证。需要注意的是人脸认证没有默认的UI页面,需要我们自己去设计配置。
使用场景
指纹认证
一般来说指纹认证是用在支付场景的,用户付款前可以使用指纹认证来进行安全检测。指纹认证也可以用在文件保护App里,只有指纹认证通过才可以查看相关文件。
面容识别
面容识别也可以在支付场景和文件保护APP中使用,这个不再赘述在文件保护APP方面,面容识别的效果会比指纹表现的更出色。因为文件保护App有一个通病,那就是“此地无银三百两”,摆明了告诉别人你这个文件很重要或很敏感。所以其他人只要搞定了你的指纹(虽然也比较困难),那就畅通无阻了。
那么文件保护App除了可以在明面上展示指纹识别外,还可以“悄悄地”再做一层面容识别(面容识别不需要设计UI界面),只有指纹识别和面容识别都过了,才展示正确的文件,否则可以展示假文件。这样做的话就可以更好的保护用户的隐私。
具体的人脸识别的代码实现可以是下面这样的:
faceManager.auth(crypto, cancellationSignal, flags, new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { if(isFingerprintSuccess){//指纹认证成功但面容识别失败 //展示假文件 showFakeFile(); } } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { } @Override public void onAuthSucceeded(BioAuthnResult result) { if(isFingerprintSuccess){//指纹认证成功 //展示真文件 showRealFile(); }else {//指纹认证失败 //展示假文件 showFakeFile(); } } @Override public void onAuthFailed() { if(isFingerprintSuccess){//指纹认证成功但面容识别失败 //展示假文件 showFakeFile(); } } }, handler);
>>访问华为线上快速身份验证服务官网,了解更多相关内容
>>获取华为线上快速身份验证服务开发指导文档
>>华为HMS Core官方论坛
>>华为线上快速身份验证服务开源仓库地址:GitHub、Gitee
点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《Spring 手撸专栏》第 1 章:开篇介绍,我要带你撸 Spring 啦!
持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥博客:https://bugstack.cn ❝ 沉淀、分享、成长,让自己和他人都能有所收获!😜 ❞ 目录 一、前言 二、目标 三、计划 四、源码 五、总结 六、系列推荐 一、前言 不正经!写写面经,去撸Spring源码啦🌶? 是的,在写了4篇关于Spring核心源码的面经内容后,我决定要去手撸一个Spring了。为啥这么干呢?因为所有我想写的内容,都希望它是以理科思维理解为目的的学会,而不是靠着硬背记住。而目前面经中涉及到的每一篇Spring源码内容分析,在即使去掉部分非主流逻辑后,依然会显得非常庞大。对有经验的老司机尚可阅读几遍接受,但就新人来讲只能放入收藏夹吃灰啦! 可能已经阅读过 2.5k下载量的 《Java面经手册》的小伙伴会知晓,这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。 所以在编写面经手册关于 S...
- 下一篇
四本书、一个专栏,揉成这篇MySQL(一)
你好,我是 yes。 先来个,开局一张图,文末会给高清图获取方式。 这图算是第一版本,本来还想填充地更详细些,但是看着感觉好冗余,暂时就先这样吧,主要是用来标注一些关键点,便于复习。 其实对咱们后端开发而言,对 MySQL 接触有很多,但是又接触不多。接触很多指的是我们经常写 SQL 一直在用它,接触不多指的是我们也仅仅只是写 SQL,一些配置相关的包括第一手掌控那都是 DBA 在搞。 这系列文章我就筛选出和我们开发息息相关的 MySQL 知识点。我打算先做一个总览,只 BFS,也就是说不会很扣细节,先成面。 等之后的文章再慢慢 DFS,各个击破。当然面试题也会同步更新,后面都会有滴。 MySQL 体系结构 这个非常重要,理解了之后后面的一些知识点才能懂,比如索引下推。 MySQL 体系结构可以分为两大块来看,分别是:Server 和存储引擎。 当客户端与 MySQL 建立连接之后,一条 SQL 语句经过 TCP 从客户端传输到 Server ,Server 会先将语句进行词法分析与语法分析,这个工作是分析器做的。 如果语法有问题,那这个错误相信大家都不陌生:You have an e...
相关文章
文章评论
共有0条评论来说两句吧...