1# 用户认证开发指导 2 3> **说明:** 4> 该开发指导需匹配API Version 8或以上版本的SDK使用。 5 6## 场景介绍 7 8当前用户认证支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景。 9 10## 接口说明 11 12userIAM_userAuth模块提供了用户认证的相关方法,包括检测认证能力、认证和取消认证等,用户可以使用人脸等生物特征信息进行认证操作。具体接口说明可以查阅[API参考](../reference/apis/js-apis-useriam-userauth.md)。 13 14在执行认证前,需要检查设备是否支持该认证能力,具体指认证类型、认证等级。如果不支持,需要考虑使用其他认证能力。 15 16**表1** 用户认证开放能力列表 17 18| 接口名 | 功能描述 | 19| ------------------------------------------------------------ | ------------------------------------------------------------ | 20| getVersion() : number | 获取认证对象的版本信息。 | 21| getAvailableStatus(authType : UserAuthType, authTrustLevel : AuthTrustLevel) : number | 根据指定的认证类型、认证等级,检测当前设备是否支持相应的认证能力。 | 22| auth(challenge: Uint8Array, authType: UserAuthType, authTrustLevel: AuthTrustLevel, callback: IUserAuthCallback): Uint8Array | 执行用户认证,使用callback方式作为异步方法。 | 23| cancelAuth(contextID : Uint8Array) : number | 通过contextID取消本次认证操作。 | 24 25## 开发步骤 26 27开发前请完成以下准备工作: 28 291. 在应用配置权限文件中,增加ohos.permission.ACCESS_BIOMETRIC的权限声明。 302. 在使用用户认证能力的代码文件中增加import userIAM_userAuth from '@ohos.userIAM.userAuth'。 31 32开发过程: 33 341. 获取Authenticator的单例对象,代码示例如下: 35 36 ```js 37 let auth = new userIAM_userAuth.UserAuth(); 38 ``` 39 402. (可选)获取认证对象的版本信息,代码示例如下: 41 42 ```js 43 let auth = new userIAM_userAuth.UserAuth(); 44 let version = auth.getVersion(); 45 console.info("auth version = " + version); 46 ``` 47 483. 根据指定的认证类型、认证等级,检测当前设备是否支持相应的认证能力,代码示例如下: 49 50 ```js 51 let auth = new userIAM_userAuth.UserAuth(); 52 let checkCode = auth.getAvailableStatus(userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1); 53 if (checkCode == userIAM_userAuth.ResultCode.SUCCESS) { 54 console.info("check auth support success"); 55 // 此处添加支持指定类型认证的逻辑 56 } else { 57 console.error("check auth support fail, code = " + checkCode); 58 // 此处添加不支持指定类型认证的逻辑 59 } 60 ``` 61 624. 执行认证操作,代码示例如下: 63 64 ```js 65 let auth = new userIAM_userAuth.UserAuth(); 66 auth.auth(null, userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1, { 67 onResult: (result, extraInfo) => { 68 try { 69 console.info("auth onResult result = " + result); 70 console.info("auth onResult extraInfo = " + JSON.stringify(extraInfo)); 71 if (result == 'SUCCESS') { 72 // 此处添加认证成功逻辑 73 } else { 74 // 此处添加认证失败逻辑 75 } 76 } catch (e) { 77 console.info("auth onResult error = " + e); 78 } 79 }, 80 81 onAcquireInfo: (module, acquire, extraInfo) => { 82 try { 83 console.info("auth onAcquireInfo module = " + module); 84 console.info("auth onAcquireInfo acquire = " + acquire); 85 console.info("auth onAcquireInfo extraInfo = " + JSON.stringify(extraInfo)); 86 } catch (e) { 87 console.info("auth onAcquireInfo error = " + e); 88 } 89 } 90 }); 91 ``` 92 935. 认证过程中取消认证,代码示例如下: 94 95 ```js 96 let auth = new userIAM_userAuth.UserAuth(); 97 // contextId通过auth接口获取 98 let contextId = auth.auth(null, userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1, { 99 onResult: (result, extraInfo) => { 100 console.info("auth onResult result = " + result); 101 }, 102 103 onAcquireInfo: (module, acquire, extraInfo) => { 104 console.info("auth onAcquireInfo module = " + module); 105 } 106 }); 107 let cancelCode = auth.cancel(contextId); 108 if (cancelCode == userIAM_userAuth.ResultCode.SUCCESS) { 109 console.info("cancel auth success"); 110 } else { 111 console.error("cancel auth fail"); 112 } 113 ``` 114