
一、开发者准备应用在开发用户身份认证功能时需要先了解以下流程并根据实际需求参考对应指导开发。查询设备支持的用户身份认证能力。发起身份认证请求获取身份认证结果。校验和使用认证结果请参考通用密钥库二次认证密钥访问控制。可选认证过程中取消认证。可选切换自定义认证。1.1 申请权限在开发具备用户身份认证的应用前需要先申请权限ohos.permission.ACCESS_BIOMETRIC应用才能使用生物特征识别能力如人脸、指纹进行身份认证。该权限授权方式为system_grant系统授权开发者只需要在module.json5配置文件的requestPermissions标签中声明权限即可获取系统授权。二、查询支持的认证能力不同的设备对于认证能力人脸、指纹、口令的支持性各有差异开发者在发起认证前应当先查询当前设备支持的用户认证能力。2.1 接口说明具体参数、返回值、错误码等描述请参考对应的userAuth.getAvailableStatus。接口名称功能描述getAvailableStatus(authType : UserAuthType, authTrustLevel : AuthTrustLevel): void根据指定的认证类型、认证等级检测当前设备是否支持相应的认证能力。2.2 开发步骤申请权限ohos.permission.ACCESS_BIOMETRIC。指定认证类型UserAuthType和认证等级AuthTrustLevel调用getAvailableStatus接口查询当前的设备是否支持相应的认证能力。认证可信等级的详细介绍请参见认证可信等级划分原则。以查询设备是否支持认证可信等级≥ATL3的人脸认证功能为例obtainingSupported(){try{// 查询认证能力是否支持userAuth.getAvailableStatus(userAuth.UserAuthType.FACE,userAuth.AuthTrustLevel.ATL3);Logger.info(current auth trust level is supported.);returntrue;}catch(error){consterr:BusinessErrorerror as BusinessError;Logger.error(current auth trust level is not supported,code is ${err?.code},message is ${err?.message});returnfalse;}}示例2发起用户认证采用认证可信等级≥ATL3的人脸认证类型相关复用设备解锁最大有效时长认证获取认证结果。initiatingUserAuthentication2(){// 设置认证参数let reuseUnlockResult:userAuth.ReuseUnlockResult{reuseMode:userAuth.ReuseMode.AUTH_TYPE_RELEVANT,reuseDuration:userAuth.MAX_ALLOWABLE_REUSE_DURATION,};try{constrandDatagetRandData();if(!randData){return;}constauthParam:userAuth.AuthParam{challenge:randData,authType:[userAuth.UserAuthType.PIN,userAuth.UserAuthType.FACE,userAuth.UserAuthType.FINGERPRINT],authTrustLevel:userAuth.AuthTrustLevel.ATL3,reuseUnlockResult:reuseUnlockResult,};// 配置认证界面constwidgetParam:userAuth.WidgetParam{title:resourceToString($r(app.string.title)),};// 获取认证对象constuserAuthInstanceuserAuth.getUserAuthInstance(authParam,widgetParam);Logger.info(get userAuth instance successfully.);// 订阅认证结果userAuthInstance.on(result,{onResult:(result:userAuth.UserAuthResult){try{Logger.info(userAuthInstance callback.);this.result[ResultIndex.EXAMPLE_2](${result.result});// 可在认证结束或其他业务需要场景取消订阅认证结果。userAuthInstance.off(result);}catch(error){consterr:BusinessErrorerror as BusinessError;Logger.error(onResult failed,code:${err?.code},Message:${err?.message});}}});// 启动认证userAuthInstance.start();Logger.info(auth start successfully.);}catch(error){consterr:BusinessErrorerror as BusinessError;Logger.error(auth failed,code is ${err?.code},message is ${err?.message});}}三、实战效果图设备录入面容进行人脸识别效果设备没有录入面容进行人脸识别效果示例代码TestUserAuthInstance2.etsimport{userAuth}fromkit.UserAuthenticationKit;import{promptAction}fromkit.ArkUI;import{BusinessError}fromkit.BasicServicesKit;import{cryptoFramework}fromkit.CryptoArchitectureKit;import{JSON}fromkit.ArkTS;functiongetRandData():Uint8Array|null{try{constrandcryptoFramework.createRandom();constlen:number16;let randData:Uint8Array|nullnull;let retryCount0;while(retryCount3){randDatarand?.generateRandomSync(len)?.data;if(randData){break;}retryCount;}returnrandData;}catch(error){consterr:BusinessErrorerror as BusinessError;console.error(getRandData error,code is ${err?.code},message is ${err?.message});returnnull;}}Entry ComponentstructTestUserAuthInstance2{State message:string请面容解锁后查看下面的信息;State lookData:booleanfalse;State result:string[]newArray(8).fill(wait);/** * 以查询设备是否支持认证可信等级≥ATL3的人脸认证功能为例 * * returns */obtainingSupported(){try{// 查询认证能力是否支持userAuth.getAvailableStatus(userAuth.UserAuthType.FACE,userAuth.AuthTrustLevel.ATL3);console.info(当前设备 支持 current auth trust level is supported.);returntrue;}catch(error){consterr:BusinessErrorerror as BusinessError;console.error(当前设备 不支持 current auth trust level is not supported,code is ${err?.code},message is ${err?.message});returnfalse;}}/** * 发起用户认证采用认证可信等级≥ATL3的人脸指纹锁屏口令认证获取认证结果。 */initiatingUserAuthentication1(){try{constrandDatagetRandData();if(!randData){return;}// 设置认证参数constauthParam:userAuth.AuthParam{challenge:randData,// authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE, userAuth.UserAuthType.FINGERPRINT],authType:[userAuth.UserAuthType.FACE],authTrustLevel:userAuth.AuthTrustLevel.ATL3,};// 配置认证界面constwidgetParam:userAuth.WidgetParam{title:面容解锁,};// 获取认证对象constuserAuthInstanceuserAuth.getUserAuthInstance(authParam,widgetParam);console.info(获取认证对象 get userAuth instance successfully.);// 订阅认证结果userAuthInstance.on(result,{onResult:(result:userAuth.UserAuthResult){try{console.info(订阅认证结果 userAuthInstance callback.JSON.stringify(result));//认证结果。包含认证结果码、认证令牌成功时、认证类型和凭据状态等信息。应用应检查result.result字段判断认证是否成功//// - 若result.result为SUCCESS(12500000)表示认证通过可使用result.token进行后续操作。//// - 若result.result为其他值表示认证不通过应根据具体错误码进行处理。if(result.result12500000){this.lookDatatrue}else{this.lookDatatrue}// 可在认证结束或其他业务需要场景取消订阅认证结果。userAuthInstance.off(result);}catch(error){consterr:BusinessErrorerror as BusinessError;console.error(认证失败 onResult failed,code:${err?.code},Message:${err?.message});}}});// 启动认证userAuthInstance.start();console.info(启动认证 auth start successfully.);}catch(error){consterr:BusinessErrorerror as BusinessError;console.error(启动认证 auth failed,code is ${err?.code},message is ${err?.message});}}build(){Column({space:30}){Text(this.message).margin({top:50}).fontSize($r(app.float.text_size_18fp)).onClick((){let obtainingSupportedthis.obtainingSupported();if(obtainingSupported){this.initiatingUserAuthentication1()}else{promptAction.openToast({message:当前设备不支持面容解锁,duration:5000})}})Text(个人信息相关数据).fontSize(20).fontColor(Color.Black).visibility(this.lookData?Visibility.Visible:Visibility.None)}.height(100%).width(100%)}}entry里module.json5申请权限requestPermissions:[{name:ohos.permission.ACCESS_BIOMETRIC,reason:$string:reason}]