开通生物特征认证能力
场景介绍
在完成数字盾密码设置后,用户可以在数字盾密码认证成功后,将系统已录入的人脸或指纹信息与账户绑定,即开通生物特征认证能力。此后,用户即可通过已绑定的生物特征(人脸或指纹)快速完成转账交易的身份验证。
约束与限制
本功能目前仅在手机设备支持。人脸认证功能仅支持具备3D人脸识别能力的设备,目前仅支持绑定一个指纹/人脸用于支付认证,且需应用服务器端同步接入配合端云协同认证。通过用户认证服务提供的接口查询支持的认证能力,可确认设备是否支持3D人脸。
业务流程

接口说明
接口及使用方法请参见API参考。
| 接口名 | 描述 |
|---|---|
| trustedAuthentication(challenge: Uint8Array, authID: bigint, label: TUILable): Promise<AuthToken> | 数字盾密码认证 |
| getBiometricAuthToken(operType: OperateType, tuiAuthToken: Uint8Array, bioAuthToken: Uint8Array): Promise<AuthToken> | 获取生物特征绑定完成后生成的authToken信息 |
开通生物特征认证能力界面介绍
如图表示开通人脸认证时对应的UI界面示例,当密码认证通过后,则会拉起系统人脸认证界面进行人脸信息绑定。

开发步骤
-
导入huks 、userAuth 、trustedAuthentication和相关依赖模块。
import { resourceManager } from '@kit.LocalizationKit'import { huks } from '@kit.UniversalKeystoreKit';import { userAuth } from '@kit.UserAuthenticationKit';import { BusinessError } from '@kit.BasicServicesKit';import { trustedAuthentication } from '@kit.DeviceSecurityKit';import { cryptoFramework } from '@kit.CryptoArchitectureKit';import { hilog } from '@kit.PerformanceAnalysisKit';import { common } from '@kit.AbilityKit'; -
通过用户认证服务提供的接口查询设备是否已录入相关凭证。
-
参考密钥管理服务提供的签名/验签指导,初始化签名会话。
-
调用数字盾密码认证接口trustedAuthentication发起生物特征认证前的密码认证申请。
async function PwdVerify(challenge: Uint8Array, context: common.UIAbilityContext):Promise<trustedAuthentication.AuthToken> {try {const authID: bigint = 11842183505170721246n;//实际填充为从服务器获取到的账号对应的authID值const resourceMgr: resourceManager.ResourceManager = context.resourceManager;const fileData : Uint8Array = await resourceMgr.getRawFileContent('test_logo_rgba.png'); //实际使用时请替换为应用要在TUI界面展示的logo图片名称const buffer = fileData.buffer;const label:trustedAuthentication.TUILable = {image: buffer as ArrayBuffer,title: "数字盾密码认证",}const result = await trustedAuthentication.trustedAuthentication(challenge, authID, label);return result;} catch (err) {hilog.error(0x0000, 'testTag', `Failed to trustedAuthentication, code:${err.code}, message:${err.message}`);throw new Error('Password verify failed:' + (err as BusinessError).message);}}const rand = cryptoFramework.createRandom();const len: number = 32;const challenge: Uint8Array = rand?.generateRandomSync(len)?.data;//实际使用时请替换为通过UniversalKeystoreKit初始化会话获取的challengelet context = this.getUIContext().getHostContext() as common.UIAbilityContext;const authToken: trustedAuthentication.AuthToken = await PwdVerify(challenge, context); -
通过用户认证服务提供的接口,拉起生物特征认证控件并发起认证。
-
当订阅的生物认证结果获取到后,将数字盾密码认证结果和生物特征认证结果统一整合,发起生物特征绑定请求。
let tuiAuthToken = new Uint8Array(1024);//实际使用时请替换为步骤6密码认证获取的authTokenlet bioAuthToken = new Uint8Array(1024);//实际使用时请替换为步骤7生物特征认证获取的authTokenlet operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH;trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken).then((newBioAuthToken) => {let authToken = newBioAuthToken.authToken as Uint8Array;}); -
参考密钥管理服务提供的签名/验签指导, 对返回生物特征绑定对应的authToken数据进行签名,并结束会话。
-
应用可将签名获取的生物特征进行验签校验,并将生物特征credential信息与账号信息在服务器端绑定。