• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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