简介

FIDO BioAuthn提供生物特征认证能力,包括指纹认证和3D人脸认证。对开发者提供安全易用的免密认证服务,并保障认证结果安全可信。

您将建立什么

在这个Codelab中,您将使用已经创建好的Demo Project实现对华为系统完整性检测的API调用,通过Demo Project你可以体验到:

您将会学到什么

硬件要求

软件要求

集成HUAWEI HMS Core能力,需要完成以下准备工作

具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。

打开服务开关

点击"管理中心"->"应用市场"->"我的应用"->"应用名"->"开发"->"概览"->"API 管理",进入服务管理菜单。

打开"FIDO"服务开关。

添加当前应用的AGC配置文件

将下载的"agconnect-services.json"文件移至AndroidStudio开发工程app的根目录下。

配置HMS SDK的maven仓地址

打开AndroidStudio项目级build.gradle文件

在allprojects ->repositories里面配置HMS SDK的maven仓地址

allprojects { repositories { google() jcenter() // Add the following line maven { url 'http://developer.huawei.com/repo/' } } }

在buildscript -> repositories里面配置HMS SDK的maven仓地址

buildscript { repositories { google() jcenter() // Add the following line maven { url 'http://developer.huawei.com/repo/' } } }

在buildscript ->dependencies里面增加配置

buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.3.0' // Add the following line classpath 'com.huawei.agconnect:agcp:1.0.0.300' } }

添加编译依赖

打开应用级的build.gradle文件

在"dependencies"中添加编译依赖

dependencies { // Add the following line implementation 'com.huawei.hms:fido:4.0.0.300' }

在文件头添加配置

Apply plugin: 'com.huawei.agconnect'

在"android"中配置签名

将从能力接入准备中获取的JKS文件(如FIDO BioAuthn Android Sample.jks)拷贝到工程的app目录下。同时在build.gradle文件中配置签名。

android { signingConfigs { config { keyAlias 'FIDO BioAuthn Android Sample' keyPassword '123456' storeFile file('FIDO BioAuthn Android Sample.jks') storePassword '123456' } } buildTypes { debug { signingConfig signingConfigs.config } release { signingConfig signingConfigs.config minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }

点击sync now 同步工程

生物特征认证示例代码分为两个部分:指纹认证,人脸认证。

指纹认证

华为提供安全的指纹认证能力。如果系统安全存在问题,回调函数(BioAuthnCallback

.onAuthError),会提供错误码BioAuthnPrompt.ERROR_SYS_INTEGRITY_FAILED或BioAuthnPrompt.ERROR_CRYPTO_VERIFY_FAILED。其他情况,参见接接口文档

注意事项:

  1. EMUI 5(API Level 24)以上版本才支持指纹认证,另外请确保设备硬件支持指纹认证。
  2. 利用PromptInfo.Builder创建PromptInfo时,setDeviceCredentialAllowed(true)和setNegativeButtonText("取消按钮标题")互斥,只能二选一。setDeviceCredentialAllowed(true)允许在指纹认证页面,切换到其他认证方式,如密码。
  3. 使用BioAuthnPrompt.auth(BioAuthnPrompt.PromptInfo, CryptoObject)接口做指纹认证时,PromptInfo不能设置setDeviceCredentialAllowed(true)。

华为指纹认证能力使用方法,如以下代码片段所示:

import android.view.View; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnCallback; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnManager; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnPrompt; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnResult; public class MainActivity extends AppCompatActivity { public void btnFingerAuthenticateWithoutCryptoObjectClicked(View view) { // can authenticate BioAuthnManager bioAuthnManager = new BioAuthnManager(this); int errorCode = bioAuthnManager.canAuth(); if (errorCode != 0) { // Can not authenticate. return; } // call back BioAuthnCallback callback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // Authentication error. } @Override public void onAuthSucceeded(BioAuthnResult result) { // Authentication succeeded } @Override public void onAuthFailed() { // Authentication failed. } }; BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), callback); // build prompt info BioAuthnPrompt.PromptInfo.Builder builder = new BioAuthnPrompt.PromptInfo.Builder().setTitle("This is the title.") .setSubtitle("This is the subtitle") .setDescription("This is the description"); // The user will first be prompted to authenticate with biometrics, but also given the option to // authenticate with their device PIN, pattern, or password. setNegativeButtonText(CharSequence) should // not be set if this is set to true. builder.setDeviceCredentialAllowed(true); // Set the text for the negative button. setDeviceCredentialAllowed(true) should not be set if this button text // is set. // builder.setNegativeButtonText("This is the 'Cancel' button."); BioAuthnPrompt.PromptInfo info = builder.build(); bioAuthnPrompt.auth(info); } }

3D人脸认证

华为提供安全的3D人脸认证能力。如果系统安全存在问题,回调函数(BioAuthnCallback.onAuthError),会提供错误码FaceManager. FACE_ERROR_SYS_INTEGRITY_FAILED。其他情况,参见接口文档

注意事项

  1. EMUI 10(API Level 29)以上版本才支持人脸认证,另外请确保设备硬件支持3D人脸认证。
  2. 使用CryptoObject对象认证时,使用KeyGenParameterSpec.Builder创建key时setUserAuthenticationRequired()必须为false。当前版本中,KeyStore没有与人脸认证结果关联。

华为人脸认证能力使用方法,如以下代码片段所示:

import android.os.CancellationSignal; import android.os.Handler; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnCallback; import com.huawei.hms.support.api.fido.bioauthn.BioAuthnResult; import com.huawei.hms.support.api.fido.bioauthn.CryptoObject; import com.huawei.hms.support.api.fido.bioauthn.FaceManager; public class MainActivity extends AppCompatActivity { public void btnFaceAuthenticateWithoutCryptoObjectClicked(View view) { // Call back. BioAuthnCallback callback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // Authentication error. } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { // Authentication help. } @Override public void onAuthSucceeded(BioAuthnResult result) { // Authentication succeeded. } @Override public void onAuthFailed() { // Authentication failed. } }; // Cancellation Signal CancellationSignal cancellationSignal = new CancellationSignal(); FaceManager faceManager = new FaceManager(this); int errorCode = faceManager.canAuth(); if (errorCode != 0) { // Cannot authenticate. return; } // Flags. int flags = 0; // Authentication messsage handler. Handler handler = null; // Recommended CryptoObject to be set to null. KeyStore is not associated with facial authentication in current // version. KeyGenParameterSpec.Builder.setUserAuthenticationRequired() must be set to false in this scenario. CryptoObject crypto = null; faceManager.auth(crypto, cancellationSignal, flags, callback, handler); } }

安装测试apk,点击测试按钮,触发指纹或人脸认证。

干得好,您已经成功完成了Codelab并学到了:

您可以阅读下面链接,了解更多相关的信息。

相关文档.

源码下载

已复制代码