1# 用户认证开发指导 2 3> **说明:** 4> 该开发指导需配合API version 9版本的SDK使用。 5 6## 场景介绍 7 8当前用户认证支持人脸识别和指纹识别,可应用于设备解锁、应用登录、支付等身份认证场景。 9 10## 接口说明 11 12userIAM_userAuth模块提供了用户认证的相关方法,包括查询认证能力、发起认证和取消认证等,用户可以使用人脸、指纹等生物特征信息进行认证操作。具体接口说明可以查阅[API参考文档](../reference/apis/js-apis-useriam-userauth.md)。 13 14在执行认证前,需要指定[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),查询设备是否支持该认证能力。 15 16**表1** 用户认证开放能力列表 17 18| 接口名称 | 功能描述 | 19| ---------- | ----------------------- | 20| getAvailableStatus(authType : UserAuthType, authTrustLevel : AuthTrustLevel): void | 根据指定的认证类型、认证等级,检测当前设备是否支持相应的认证能力。 | 21| getAuthInstance(challenge : Uint8Array, authType : UserAuthType, authTrustLevel : AuthTrustLevel): AuthInstance | 获取AuthInstance对象,用于执行用户身份认证。 | 22| on(name : AuthEventKey, callback : AuthEvent) : void | 订阅指定类型的用户认证事件。 | 23| off(name : AuthEventKey) : void | 取消订阅特定类型的认证事件。 | 24| start: void | 执行用户认证。 | 25| cancel: void | 取消本次认证操作。 | 26 27## 查询当前设备是否支持相应的认证能力 28 29### 开发步骤 30 311. 申请权限。调用[getAvailableStatus](../reference/apis/js-apis-useriam-userauth.md#useriam_userauthgetavailablestatus9)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。 32 332. 指定[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),调用[getAvailableStatus](../reference/apis/js-apis-useriam-userauth.md#useriam_userauthgetavailablestatus9)接口查询当前的设备是否支持相应的认证能力。 34 35 ```js 36 import userIAM_userAuth from '@ohos.userIAM.userAuth'; 37 38 // 查询认证能力是否支持 39 try { 40 userIAM_userAuth.getAvailableStatus(userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1); 41 console.info("current auth trust level is supported"); 42 } catch (error) { 43 console.info("current auth trust level is not supported, error = " + error); 44 } 45 ``` 46 47## 执行认证操作并订阅认证结果 48 49### 开发步骤 50 511. 申请权限。调用[start](../reference/apis/js-apis-useriam-userauth.md#start9)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。 52 532. 指定challenge、[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),获取认证对象。 54 553. 调用[on](../reference/apis/js-apis-useriam-userauth.md#on9)接口订阅认证结果。 56 574. 调用[start](../reference/apis/js-apis-useriam-userauth.md#start9)接口发起认证,通过[callback](../reference/apis/js-apis-useriam-userauth.md#callback9)回调返回认证结果。 58 595. 调用[off](../reference/apis/js-apis-useriam-userauth.md#off9)接口取消订阅认证结果。 60 61 ```js 62 import userIAM_userAuth from '@ohos.userIAM.userAuth'; 63 64 let challenge = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); 65 let authType = userIAM_userAuth.UserAuthType.FACE; 66 let authTrustLevel = userIAM_userAuth.AuthTrustLevel.ATL1; 67 68 // 获取认证对象 69 let auth; 70 try { 71 auth = userIAM_userAuth.getAuthInstance(challenge, authType, authTrustLevel); 72 console.log("get auth instance success"); 73 } catch (error) { 74 console.log("get auth instance failed" + error); 75 } 76 77 // 订阅认证结果 78 try { 79 auth.on("result", { 80 callback: (result: userIAM_userAuth.AuthResultInfo) => { 81 console.log("authV9 result " + result.result); 82 console.log("authV9 token " + result.token); 83 console.log("authV9 remainAttempts " + result.remainAttempts); 84 console.log("authV9 lockoutDuration " + result.lockoutDuration); 85 } 86 }); 87 console.log("subscribe authentication event success"); 88 } catch (error) { 89 console.log("subscribe authentication event failed " + error); 90 } 91 92 // 开始认证 93 try { 94 auth.start(); 95 console.info("authV9 start auth success"); 96 } catch (error) { 97 console.info("authV9 start auth failed, error = " + error); 98 } 99 100 // 取消订阅认证结果 101 try { 102 auth.off("result"); 103 console.info("cancel subscribe authentication event success"); 104 } catch (error) { 105 console.info("cancel subscribe authentication event failed, error = " + error); 106 } 107 ``` 108 109## 执行认证操作并订阅认证过程中的提示信息 110 111### 开发步骤 112 1131. 申请权限。调用[start](../reference/apis/js-apis-useriam-userauth.md#start9)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。 114 1152. 指定challenge、[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),获取认证对象。 116 1173. 调用[on](../reference/apis/js-apis-useriam-userauth.md#on9)接口订阅认证过程中的提示信息。 118 1194. 调用[start](../reference/apis/js-apis-useriam-userauth.md#start9)接口发起认证,通过[callback](../reference/apis/js-apis-useriam-userauth.md#callback9)回调返回认证过程中的提示信息。 120 1215. 调用[off](../reference/apis/js-apis-useriam-userauth.md#off9)接口取消订阅认证过程中的提示信息。 122 123 ```js 124 import userIAM_userAuth from '@ohos.userIAM.userAuth'; 125 126 let challenge = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); 127 let authType = userIAM_userAuth.UserAuthType.FACE; 128 let authTrustLevel = userIAM_userAuth.AuthTrustLevel.ATL1; 129 130 // 获取认证对象 131 let auth; 132 try { 133 auth = userIAM_userAuth.getAuthInstance(challenge, authType, authTrustLevel); 134 console.log("get auth instance success"); 135 } catch (error) { 136 console.log("get auth instance failed" + error); 137 } 138 139 // 订阅认证过程中的提示信息 140 try { 141 auth.on("tip", { 142 callback : (result : userIAM_userAuth.TipInfo) => { 143 switch (result.tip) { 144 case userIAM_userAuth.FaceTips.FACE_AUTH_TIP_TOO_BRIGHT: 145 // do something; 146 case userIAM_userAuth.FaceTips.FACE_AUTH_TIP_TOO_DARK: 147 // do something; 148 default: 149 // do others 150 } 151 } 152 }); 153 console.log("subscribe authentication event success"); 154 } catch (error) { 155 console.log("subscribe authentication event failed " + error); 156 } 157 158 // 开始认证 159 try { 160 auth.start(); 161 console.info("authV9 start auth success"); 162 } catch (error) { 163 console.info("authV9 start auth failed, error = " + error); 164 } 165 166 // 取消订阅认证过程中的提示信息 167 try { 168 auth.off("tip"); 169 console.info("cancel subscribe tip information success"); 170 } catch (error) { 171 console.info("cancel subscribe tip information failed, error = " + error); 172 } 173 ``` 174 175## 认证过程中取消认证 176 177### 开发步骤 178 1791. 申请权限。调用[cancel](../reference/apis/js-apis-useriam-userauth.md#cancel9)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。 180 1812. 指定challenge、[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),获取认证对象。 182 1833. 调用[start](../reference/apis/js-apis-useriam-userauth.md#start9)接口发起认证。 184 1854. 通过调用[cancel](../reference/apis/js-apis-useriam-userauth.md#cancel9)接口取消本次认证。 186 187 ```js 188 import userIAM_userAuth from '@ohos.userIAM.userAuth'; 189 190 let challenge = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); 191 let authType = userIAM_userAuth.UserAuthType.FACE; 192 let authTrustLevel = userIAM_userAuth.AuthTrustLevel.ATL1; 193 194 // 获取认证对象 195 let auth; 196 try { 197 auth = userIAM_userAuth.getAuthInstance(challenge, authType, authTrustLevel); 198 console.log("get auth instance success"); 199 } catch (error) { 200 console.log("get auth instance failed" + error); 201 } 202 203 // 开始认证 204 try { 205 auth.start(); 206 console.info("authV9 start auth success"); 207 } catch (error) { 208 console.info("authV9 start auth failed, error = " + error); 209 } 210 211 // 取消认证 212 try { 213 auth.cancel(); 214 console.info("cancel auth success"); 215 } catch (error) { 216 console.info("cancel auth failed, error = " + error); 217 } 218 ``` 219