乐趣区

关于hms-core:破译碟中谍经典画面解密指纹验证刷脸

科幻电影始终是人们津津有味的话题,其中不乏一些经典局面,让观众为之震惊赞叹,例如《钢铁侠》中的悬浮虚构触摸屏、《碟中谍》中的指纹虹膜辨认等。

现在,这些看似高大上的科技也走进了咱们的日常生活,像指纹与面容辨认,其利用曾经极为广泛与宽泛。

当今社会对个人隐私的爱护越来越器重,对 App 的安全性也提出了更高的要求,具备私密性与独特性的指纹与面容辨认,就成为了强有力的保障。

当用户在解锁设施、领取、文件拜访时,利用指纹或者面容认证,这在很大水平上缩小了帐号盗取、信息泄露的危险。

HMS 的 FIDO 提供了相干性能:凋谢基于 WebAuthn 规范的 FIDO2 客户端能力,提供本地指纹、面容认证凋谢能力,为利用提供平安可信的本地生物特色认证和平安便捷的线上疾速身份验证能力。

其劣势在于通过零碎完整性检测和密钥校验机制保障后果平安可信,通用的无明码用户身份验证计划,易与现有帐号基础设施集成。

接下来,为大家阐明如何集成指纹和面容认证能力。

次要的接入步骤如下:

配置 AppGallery Connect

集成 HMS Core SDK

集成本地生物认证能力

步骤 1、2 能够参考超链接中的领导进行实现,这里不做赘述。

须要留神的是步骤 2 中提供了两种本地生物认证的 SDK:
Bioauthn-AndroidX:

Java 代码

implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301'

Bioauthn:

Java 代码

implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301'

这两个 SDK 对外体现的能力略有不同。

次要体现在 BioAuthn-AndroidX SDK 的指纹认证能力提供对立界面,不须要利用本人绘制指纹认证提醒界面;BioAuthn SDK 的指纹认证能力不提供对立界面,须要利用本人绘制指纹认证提醒界面。

能够参考官网 FAQ 中的阐明:

这次咱们次要介绍 Bioauthn-AndroidX 的集成,Demo 能够在这里下载

集成本地生物认证能力
注:

请保障手机没有 root 过,不然无奈应用指纹和面容能力

测试前请先保障手机中曾经有相应的指纹和面容信息,否则会报相干的错误码。

能够在设置 - 生物辨认和明码 - 指纹 / 人脸识别中增加相干指纹和面容

指纹认证
应用指纹认证分为两步:

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);

拜访华为 FIDO 官网,获取 FIDO 开发文档

拜访华为开发者联盟官网、开发领导文档

华为挪动服务开源仓库地址:GitHub、Gitee

原文链接:https://developer.huawei.com/…
原作者:胡椒

退出移动版