简介

FIDO BioAuthn提供本地生物特征认证能力,包括指纹认证和3D面容认证。对开发者提供安全易用的免密认证服务,并保障认证结果安全可信。FIDO提供两个版本BioAuthn SDK。分别是:

您将建立什么

调用华为3D人脸认证的过程。在这个Codelab中,您将使用已经创建好的Demo Project实现对华为BioAuthn的API调用,通过Demo Project你可以体验到:

您将会学到什么

其他特性

线上快速身份验证(FIDO2)

硬件要求

软件要求

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

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

打开服务开关

  1. 在项目的应用信息页面,选择API管理页签。
  2. 打开"FIDO"服务开关。

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

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

配置HMS Core SDK的Maven仓地址

打开Android Studio项目级build.gradle文件

在allprojects > repositories里面配置HMS Core SDK的Maven仓地址

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

在buildscript > repositories里面配置HMS Core SDK的Maven仓地址

buildscript { repositories { google() jcenter() // Add the following line maven { url 'https://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.4.1.300' } }

添加编译依赖

打开应用级的build.gradle文件

在"dependencies"中添加编译依赖

1. BioAuthn-AndroidX

dependencies { implementation 'com.huawei.hms:fido-bioauthn-androidx:5.0.2.303' }

2. BioAuthn

dependencies { implementation 'com.huawei.hms:fido-bioauthn:5.0.2.303' }

在文件头添加配置

apply plugin: 'com.huawei.agconnect'

在"android"中配置签名

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

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

点击Sync Now同步工程

FIDO提供两个版本BioAuthn SDK。分别是:

这里分别介绍相关API的使用。

BioAuthn-AndroidX SDK

1. 指纹认证

华为提供安全的指纹认证能力。如果系统安全存在问题,回调方法BioAuthnCallback.onAuthError(),会提供错误码BioAuthnPrompt.ERROR_SYS_INTEGRITY_FAILED或BioAuthnPrompt.ERROR_CRYPTO_VERIFY_FAILED。如果设备运行环境安全,则执行指纹认证。指纹认证的错误码详情,请参见接口文档

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

Java语言:

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) { // 是否支持指纹认证 BioAuthnManager bioAuthnManager = new BioAuthnManager(this); int errorCode = bioAuthnManager.canAuth(); if (errorCode != 0) { // 不支持指纹认证 return; } // 回调 BioAuthnCallback callback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // 认证错误 } @Override public void onAuthSucceeded(BioAuthnResult result) { // 认证成功 } @Override public void onAuthFailed() { // 认证失败 } }; BioAuthnPrompt bioAuthnPrompt = new BioAuthnPrompt(this, ContextCompat.getMainExecutor(this), callback); // 构建提示信息 BioAuthnPrompt.PromptInfo.Builder builder = new BioAuthnPrompt.PromptInfo.Builder().setTitle("This is the title.") .setSubtitle("This is the subtitle") .setDescription("This is the description"); // 首先会提示用户使用指纹认证,但是也提供选项,可以使用PIN码、图形解锁或锁屏密码进行认证。 // 但是,如果这里设置为true,则不能设置setNegativeButtonText(CharSequence)。 builder.setDeviceCredentialAllowed(true); // 设置取消按钮标题。如果设置了该值,则不能setDeviceCredentialAllowed(true)。 // builder.setNegativeButtonText("This is the 'Cancel' button."); BioAuthnPrompt.PromptInfo info = builder.build(); bioAuthnPrompt.auth(info); } }

Kotlin语言:

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.BioAuthnManager import com.huawei.hms.support.api.fido.bioauthn.BioAuthnPrompt import com.huawei.hms.support.api.fido.bioauthn.BioAuthnResult import java.util.concurrent.Executors class BioMainActivity : AppCompatActivity() { fun btnFingerAuthenticateWithoutCryptoObjectClicked(view: View?) { val bm = BioAuthnManager(this) val errorCode = bm.canAuth() if (errorCode != 0) { // 不支持指纹认证 return; } // 回调 val bioAuthnCallback: BioAuthnCallback = object : BioAuthnCallback() { override fun onAuthError(err: Int, message: CharSequence) { // 认证错误 } override fun onAuthSucceeded(result: BioAuthnResult) { // 认证成功 } override fun onAuthFailed() { // 认证失败 } } var bioAuthnPrompt = BioAuthnPrompt(this, Executors.newSingleThreadExecutor(), bioAuthnCallback) // Build the biometric prompt info val builder = BioAuthnPrompt.PromptInfo.Builder().setTitle("This is the title.") .setSubtitle("This is the subtitle") .setDescription("This is the description") // 首先会提示用户使用指纹认证,但是也提供选项,可以使用PIN码、图形解锁或锁屏密码进行认证。 // 但是,如果这里设置为true,则不能设置setNegativeButtonText(CharSequence)。 builder.setDeviceCredentialAllowed(false) // 设置取消按钮标题。如果设置了该值,则不能setDeviceCredentialAllowed(true)。 // builder.setNegativeButtonText("This is the 'Cancel' button."); val info = builder.build() bioAuthnPrompt.auth(info) } }

2. 3D面容认证

华为提供安全的3D面容认证能力。如果系统安全存在问题,回调方法BioAuthnCallback.onAuthError(),会提供错误码FaceManager.FACE_ERROR_SYS_INTEGRITY_FAILED。如果设备运行环境安全,则执行3D面容认证。3D面容认证的错误码详情,参见接口文档

华为3D面容认证能力使用方法,如以下代码片段所示:

Java语言:

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) { // 回调 BioAuthnCallback callback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // 认证错误 } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { // 帮助 } @Override public void onAuthSucceeded(BioAuthnResult result) { // 认证成功 } @Override public void onAuthFailed() { // 认证失败 } }; // 取消信号 CancellationSignal cancellationSignal = new CancellationSignal(); FaceManager faceManager = new FaceManager(this); int errorCode = faceManager.canAuth(); if (errorCode != 0) { // 不支持认证 return; } // Flags. int flags = 0; // 认证消息处理器 Handler handler = null; // 推荐CryptoObject传null,当前版本,KeyStore没有和面容识别关联。 // KeyGenParameterSpec.Builder.setUserAuthenticationRequired()必须设置为false。 CryptoObject crypto = null; faceManager.auth(crypto, cancellationSignal, flags, callback, handler); } }

Kotlin语言:

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.FaceManager import com.huawei.hms.support.api.fido.bioauthn.CryptoObject class BioMainActivity : AppCompatActivity() { fun btnFaceAuthenticateWithoutCryptoObjectClicked(view: View?) { val callbackFace: BioAuthnCallback = object : BioAuthnCallback() { override fun onAuthError(errMsgId: Int, errString: CharSequence) { // 认证错误 } override fun onAuthHelp(helpMsgId: Int, helpString: CharSequence) { // 帮助 } override fun onAuthSucceeded(result: BioAuthnResult) { // 认证成功 } override fun onAuthFailed() { // 认证失败 } } // 取消信号 val cancellationSignal = CancellationSignal() val faceManager = FaceManager(this) val errorCode = faceManager.canAuth() if (errorCode != 0) { // 不支持认证 return } // Flags. val flag = 0 // 认证消息处理器 var handler: Handler? = null // 推荐CryptoObject传null,当前版本,KeyStore没有和面容识别关联。 // KeyGenParameterSpec.Builder.setUserAuthenticationRequired()必须设置为false。 var crypto: CryptoObject? = null faceManager.auth(crypto, cancellationSignal, flag, callbackFace, handler) } }

BioAuthn SDK

1. 指纹认证

华为提供安全的指纹认证能力。如果系统安全存在问题,回调方法BioAuthnCallback.onAuthError(),会提供错误码FingerprintManager.ERROR_SYS_INTEGRITY_FAILED或FingerprintManager.ERROR_CRYPTO_VERIFY_FAILED。如果设备运行环境安全,则执行指纹认证。指纹认证的错误码详情,请参见接口文档

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

Java语言:

import android.app.Activity; import android.view.View; 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.FingerprintManager; import java.util.concurrent.Executors; public class MainActivity extends Activity { public void btnFingerAuthenticateWithoutCryptoObjectClicked(View view) { // 回调 BioAuthnCallback bioAuthnCallback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // 认证错误 } @Override public void onAuthSucceeded(BioAuthnResult result) { // 认证成功 } @Override public void onAuthFailed() { // 认证失败 } }; FingerprintManager fingerprintManager = new FingerprintManager(this, Executors.newSingleThreadExecutor(), bioAuthnCallback); // 是否支持认证 int errorCode = fingerprintManager.canAuth(); if (errorCode == 0) { // 不支持认证 return; } // 执行认证 fingerprintManager.auth(); } }

Kotlin语言:

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.FingerprintManager import java.util.concurrent.Executors class MainActivity : AppCompatActivity() { fun btnFingerCanAuthenticateClicked(view: View?) { // 回调 val bioAuthnCallback: BioAuthnCallback = object : BioAuthnCallback() { override fun onAuthError(err: Int, message: CharSequence) { // 认证错误 } override fun onAuthSucceeded(result: BioAuthnResult) { // 认证成功 } override fun onAuthFailed() { // 认证失败 } } var fingerprintManager = FingerprintManager(this, Executors.newSingleThreadExecutor(), bioAuthnCallback) // 是否支持认证 val errorCode = fingerprintManager.canAuth() if (errorCode != 0) { // 不支持认证 return } // 执行认证 fingerprintManager.auth() } }

2. 3D面容认证

华为提供安全的3D面容认证能力。如果系统安全存在问题,回调方法BioAuthnCallback.onAuthError(),会提供错误码FaceManager.FACE_ERROR_SYS_INTEGRITY_FAILED。如果设备运行环境安全,则执行3D面容认证。3D面容认证的错误码详情,参见接口文档

华为3D面容认证能力使用方法,如以下代码片段所示:

Java语言:

import android.app.Activity; import android.os.CancellationSignal; import android.os.Handler; import android.view.View; 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 Activity { public void btnFaceAuthenticateWithoutCryptoObjectClicked(View view) { // 回调 BioAuthnCallback callback = new BioAuthnCallback() { @Override public void onAuthError(int errMsgId, CharSequence errString) { // 认证错误 } @Override public void onAuthHelp(int helpMsgId, CharSequence helpString) { // 帮助 } @Override public void onAuthSucceeded(BioAuthnResult result) { // 认证成功 } @Override public void onAuthFailed() { // 认证失败 } }; // 取消信号 CancellationSignal cancellationSignal = new CancellationSignal(); FaceManager faceManager = new FaceManager(this); int errorCode = faceManager.canAuth(); if (errorCode != 0) { // 不支持认证 return; } // Flags. int flags = 0; // 认证消息处理器 Handler handler = null; // 推荐CryptoObject传null,当前版本,KeyStore没有和面容识别关联。 // KeyGenParameterSpec.Builder.setUserAuthenticationRequired()必须设置为false。 CryptoObject crypto = null; faceManager.auth(crypto, cancellationSignal, flags, callback, handler); } }

Kotlin语言:

import android.os.CancellationSignal import android.view.View import android.os.Handler 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.FaceManager import com.huawei.hms.support.api.fido.bioauthn.CryptoObject class MainActivity : AppCompatActivity() { fun btnFaceAuthenticateWithoutCryptoObjectClicked(view: View?) { // 回调 val callback: BioAuthnCallback = object : BioAuthnCallback() { override fun onAuthError(errMsgId: Int, errString: CharSequence) { // 认证错误 } override fun onAuthHelp(helpMsgId: Int, helpString: CharSequence) { // 帮助 } override fun onAuthSucceeded(result: BioAuthnResult) { // 认证成功 } override fun onAuthFailed() { // 认证失败 } } // 取消信号 val cancellationSignal = CancellationSignal() val faceManager = FaceManager(this) val errorCode = faceManager.canAuth() if (errorCode != 0) { // 不支持认证 return; } // Flags. val flags = 0 // 认证消息处理器 val handler: Handler? = null // 推荐CryptoObject传null,当前版本,KeyStore没有和面容识别关联。 // KeyGenParameterSpec.Builder.setUserAuthenticationRequired()必须设置为false。 val crypto: CryptoObject? = null faceManager.auth(crypto, cancellationSignal, flags, callback, handler) } }

安装测试APK,点击测试按钮,触发指纹或面容认证。

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

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

相关文档

BioAuthn-AndroidX SDK

您可以点击下方按钮下载源码。

源码下载

BioAuthn SDK

您可以点击下方按钮下载源码。

源码下载

已复制代码