跳到主要内容

开通生物特征认证能力

场景介绍

在完成数字盾密码设置后,用户可以在数字盾密码认证成功后,将系统已录入的人脸或指纹信息与账户绑定,即开通生物特征认证能力。此后,用户即可通过已绑定的生物特征(人脸或指纹)快速完成转账交易的身份验证。

约束与限制

本功能目前仅在手机设备支持。人脸认证功能仅支持具备3D人脸识别能力的设备,目前仅支持绑定一个指纹/人脸用于支付认证,且需应用服务器端同步接入配合端云协同认证。通过用户认证服务提供的接口查询支持的认证能力,可确认设备是否支持3D人脸。

业务流程

接口说明

接口及使用方法请参见API参考

接口名描述
trustedAuthentication(challenge: Uint8Array, authID: bigint, label: TUILable): Promise<AuthToken>数字盾密码认证
getBiometricAuthToken(operType: OperateType, tuiAuthToken: Uint8Array, bioAuthToken: Uint8Array): Promise<AuthToken>获取生物特征绑定完成后生成的authToken信息

开通生物特征认证能力界面介绍

如图表示开通人脸认证时对应的UI界面示例,当密码认证通过后,则会拉起系统人脸认证界面进行人脸信息绑定。

开发步骤

  1. 导入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';
  2. 通过用户认证服务提供的接口查询设备是否已录入相关凭证

  3. 参考密钥管理服务提供的签名/验签指导,初始化签名会话。

  4. 调用数字盾密码认证接口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初始化会话获取的challenge
    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
    const authToken: trustedAuthentication.AuthToken = await PwdVerify(challenge, context);
  5. 通过用户认证服务提供的接口,拉起生物特征认证控件并发起认证

  6. 当订阅的生物认证结果获取到后,将数字盾密码认证结果和生物特征认证结果统一整合,发起生物特征绑定请求。

    let tuiAuthToken = new Uint8Array(1024);//实际使用时请替换为步骤6密码认证获取的authToken
    let bioAuthToken = new Uint8Array(1024);//实际使用时请替换为步骤7生物特征认证获取的authToken
    let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH;
    trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken).then((newBioAuthToken) => {
    let authToken = newBioAuthToken.authToken as Uint8Array;
    });
  7. 参考密钥管理服务提供的签名/验签指导, 对返回生物特征绑定对应的authToken数据进行签名,并结束会话。

  8. 应用可将签名获取的生物特征进行验签校验,并将生物特征credential信息与账号信息在服务器端绑定。