HarmonyOS 鸿蒙Next中用户认证(人脸识别)

HarmonyOS 鸿蒙Next中用户认证(人脸识别)

  1. 开启权限
ohos.permission.ACCESS_BIOMETRIC
  1. 指定认证类型(UserAuthType)和认证等级(AuthTrustLevel),调用getAvailableStatus接口查询当前的设备是否支持相应的认证能力。

认证可信等级的详细介绍请参见认证可信等级划分原则

import { BusinessError } from '@kit.BasicServicesKit';
import { userAuth } from '@kit.UserAuthenticationKit';

// 查询认证能力是否支持
try {    
    userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL1);    
    console.info('current auth trust level is supported');
} catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error(`current auth trust level is not supported. Code is ${err?.code}, message is ${err?.message}`);
}
demo(权限要开,手机要录人脸)
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth, UserAuthIcon } from '@kit.UserAuthenticationKit';
// API version 10
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  rand = cryptoFramework.createRandom();
  len: number = 16;
  randData: Uint8Array = this.rand?.generateRandomSync(this.len)?.data;
  authParam: userAuth.AuthParam = {
    challenge: this.randData,
    authType: [userAuth.UserAuthType.FACE, userAuth.UserAuthType.PIN],
    authTrustLevel: userAuth.AuthTrustLevel.ATL3
  };
  widgetParam: userAuth.WidgetParam = {
    title: '请进行身份认证'
  };

  build() {
    Row() {
      Column() {
        UserAuthIcon({
          authParam: this.authParam,
          widgetParam: this.widgetParam,
          iconHeight: 200,
          iconColor: Color.Blue,
          onIconClick: () => {
            console.info('The user clicked the icon.');

            try {
              const rand = cryptoFramework.createRandom();
              const len: number = 16; // Generate a 16-byte random number.
              const randData: Uint8Array = rand?.generateRandomSync(len)?.data;
              // 设置认证参数
              const authParam: userAuth.AuthParam = {
                challenge: randData,
                authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE],
                authTrustLevel: userAuth.AuthTrustLevel.ATL3,
              };
              // 配置认证界面
              const widgetParam: userAuth.WidgetParam = {
                title: '请进行身份认证',
              };
              // 获取认证对象
              const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);
              console.info('get userAuth instance success');
              // 订阅认证结果
              userAuthInstance.on('result', {
                onResult(result) {
                  console.info(`userAuthInstance callback result: ${JSON.stringify(result)}`);
                  // 可在认证结束或其他业务需要场景,取消订阅认证结果
                  userAuthInstance.off('result');
                }
              });
              console.info('auth on success');
              userAuthInstance.start();
              console.info('auth start success');
            } catch (error) {
              const err: BusinessError = error as BusinessError;
              console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
            }
          },
          onAuthResult: (result: userAuth.UserAuthResult) => {
            console.info(`Get user auth result, result = ${JSON.stringify(result)}`);
          }
        })
      }
    }
  }
}

更多关于HarmonyOS 鸿蒙Next中用户认证(人脸识别)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

666

更多关于HarmonyOS 鸿蒙Next中用户认证(人脸识别)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next的人脸识别认证基于系统级生物特征识别框架实现。通过FaceManager提供标准化API接口,支持3D结构光和ToF等活体检测技术。认证过程调用HUKS硬件密钥库进行数据加密,认证结果通过统一身份认证服务返回。系统严格遵循隐私保护规范,生物特征数据仅存储在安全隔离区(TEE),不上传云端。

在HarmonyOS Next中实现人脸识别认证需要遵循以下关键步骤:

  1. 权限声明:在config.json中声明ohos.permission.ACCESS_BIOMETRIC权限,这是使用生物特征认证的基础。

  2. 认证能力检查:通过getAvailableStatus()接口验证设备是否支持指定类型(FACE)和认证等级(ATL1-ATL4)的组合。不同等级对应不同的安全强度,需根据业务场景选择。

  3. 认证参数配置:使用AuthParam设置挑战值(challenge)、认证类型数组和可信等级。挑战值应使用加密随机数生成,增强防重放能力。

  4. UI组件集成:通过UserAuthIcon组件提供标准化的认证入口,可自定义图标尺寸、颜色等属性。点击事件触发认证流程。

  5. 认证实例管理:调用getUserAuthInstance()获取认证实例,通过on()方法订阅认证结果事件。认证完成后及时调用off()取消订阅。

  6. 错误处理:必须捕获BusinessError,通过code和message区分设备不支持、用户取消、认证失败等不同场景。

注意:实际使用前需在设备中录入人脸信息,且认证等级需与设备能力匹配。高安全场景建议使用ATL3或ATL4等级。

回到顶部