• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 用户认证开发指导
2
3> **说明:**
4> 该开发指导需配合API version 10版本的SDK使用。
5
6## 场景介绍
7
8当前用户认证支持Pin码认证、人脸识别和指纹识别,可应用于设备解锁、应用登录、支付等身份认证场景。
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| getUserAuthInstance(authParam: AuthParam, widgetParam: WidgetParam): UserAuthInstance | 获取UserAuthInstance对象,用于执行用户身份认证,并支持使用统一用户身份认证组件。 |
22| on(type: 'result', callback: IAuthCallback): void | 订阅用户身份认证结果。 |
23| off(type: 'result', callback?: IAuthCallback): void | 取消订阅用户身份认证结果。 |
24| start(): void | 执行用户认证。        |
25| cancel(): void | 取消本次认证操作。    |
26
27**表2** 用户身份认证可信等级划分原则
28
29| 确认用户身份的认证可信等级 | 认证能力指标                      | 说明&举例                                                    | 可支撑的典型业务场景                                 |
30| -------------------------- | --------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |
31| ATL4                       | FRR=10%时,FAR≤0.0003%,SAR≤3%    | 能高精度地识别用户个体,有很强的活体检测能力,如采用了安全键盘的PIN码认证和有特殊安全增强的指纹与3D人脸认证。 | 小额支付                                             |
32| ATL3                       | FRR=10%时,FAR≤0.002%,SAR≤7%     | 能精确识别用户个体,有较强的活体检测能力,如有特殊安全增强的2D人脸认证。 | 设备解锁                                             |
33| ATL2                       | FRR=10%时,FAR≤0.002%,7%<SAR≤20% | 能精确识别用户个体,有一定的活体检测能力,如基于普通测距和佩戴检测的手表作为可信持有物的认证。 | 维持设备解锁状态、应用登录                           |
34| ATL1                       | FRR=10%时,FAR≤1%,7%<SAR≤20%     | 能识别用户个体,有一定的活体检测能力,如声纹认证。           | 业务风控、一般个人数据查询、精准业务推荐、个性化服务 |
35
36
37## 查询当前设备是否支持相应的认证能力
38
39### 开发步骤
40
411. 申请权限。调用[getAvailableStatus](../reference/apis/js-apis-useriam-userauth.md#useriam_userauthgetavailablestatus9)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。
42
432. 指定[认证类型](../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)接口查询当前的设备是否支持相应的认证能力。
44
45    ```ts
46    import userIAM_userAuth from '@ohos.userIAM.userAuth';
47
48    // 查询认证能力是否支持,如果该设备未录入相关特征,就会打印不支持日志信息
49    try {
50        userIAM_userAuth.getAvailableStatus(userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1);
51        console.info('current auth trust level is supported');
52    } catch (error) {
53        console.error('current auth trust level is not supported, error = ' + error);
54    }
55    ```
56
57## 执行认证操作并订阅认证结果
58
59### 开发步骤
60
611. 申请权限。调用[start](../reference/apis/js-apis-useriam-userauth.md#start10)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。
62
632. 指定challenge、[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),获取认证对象。
64
653. 调用[on](../reference/apis/js-apis-useriam-userauth.md#on10)接口订阅认证结果。
66
674. 调用[start](../reference/apis/js-apis-useriam-userauth.md#start10)接口发起认证,通过[onResult](../reference/apis/js-apis-useriam-userauth.md#onresult10)回调返回认证结果。
68
69    ```ts
70    import userIAM_userAuth from '@ohos.userIAM.userAuth';
71
72    const authParam : userIAM_userAuth.AuthParam = {
73      challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),
74      authType: [userIAM_userAuth.UserAuthType.PIN],
75      authTrustLevel: userIAM_userAuth.AuthTrustLevel.ATL1,
76    };
77    const widgetParam : userIAM_userAuth.WidgetParam = {
78      title: '请输入密码',
79    };
80    try {
81      //获取认证对象
82      let userAuthInstance = userIAM_userAuth.getUserAuthInstance(authParam, widgetParam);
83      console.log('get userAuth instance success');
84      //订阅认证结果
85      userAuthInstance.on('result', {
86        onResult (result) {
87          console.log('userAuthInstance callback result = ' + JSON.stringify(result));
88        }
89      });
90      console.log('auth on success');
91      userAuthInstance.start();
92      console.log('auth start success');
93    } catch (error) {
94      console.error('auth catch error: ' + JSON.stringify(error));
95    }
96    ```
97
985. 如果业务需要取消订阅认证结果,可以使用已经成功订阅事件的[UserAuthInstance](../reference/apis/js-apis-useriam-userauth.md#userauthinstance10)对象调用[off](../reference/apis/js-apis-useriam-userauth.md#off10)接口进行取消订阅。
99
100   ```ts
101   import userIAM_userAuth from '@ohos.userIAM.userAuth';
102
103   const authParam : userIAM_userAuth.AuthParam = {
104     challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),
105     authType: [userIAM_userAuth.UserAuthType.PIN],
106     authTrustLevel: userIAM_userAuth.AuthTrustLevel.ATL1,
107   };
108   const widgetParam : userIAM_userAuth.WidgetParam = {
109     title: '请输入密码',
110   };
111   try {
112     //获取认证对象
113     let userAuthInstance = userIAM_userAuth.getUserAuthInstance(authParam, widgetParam);
114     console.log('get userAuth instance success');
115     //取消订阅认证结果
116     userAuthInstance.off('result', {
117       onResult (result) {
118         console.log('auth off result: ' + JSON.stringify(result));
119       }
120     });
121     console.log('auth off success');
122   } catch (error) {
123     console.error('auth catch error: ' + JSON.stringify(error));
124   }
125   ```
126
127## 认证过程中取消认证
128
129### 开发步骤
130
1311. 申请权限。调用[cancel](../reference/apis/js-apis-useriam-userauth.md#cancel10)接口,需要在module.json5文件的requestPermissions对象中配置ohos.permission.ACCESS_BIOMETRIC权限。更多配置信息请参考[Stage模型应用程序包结构](../quick-start/module-configuration-file.md)。
132
1332. 指定challenge、[认证类型](../reference/apis/js-apis-useriam-userauth.md#userauthtype8)和[认证等级](../reference/apis/js-apis-useriam-userauth.md#authtrustlevel8),获取认证对象。
134
1353. 调用[start](../reference/apis/js-apis-useriam-userauth.md#start10)接口发起认证。
136
1374. 通过使用已经成功发起认证的调用[UserAuthInstance](../reference/apis/js-apis-useriam-userauth.md#userauthinstance10)对象调用[cancel](../reference/apis/js-apis-useriam-userauth.md#cancel10)接口取消本次认证。
138
139    ```ts
140    import userIAM_userAuth from '@ohos.userIAM.userAuth';
141
142    const authParam : userIAM_userAuth.AuthParam = {
143      challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),
144      authType: [userIAM_userAuth.UserAuthType.PIN],
145      authTrustLevel: userIAM_userAuth.AuthTrustLevel.ATL1,
146    };
147    const widgetParam : userIAM_userAuth.WidgetParam = {
148      title: '请输入密码',
149    };
150    try {
151      //获取认证对象
152      let userAuthInstance = userIAM_userAuth.getUserAuthInstance(authParam, widgetParam);
153      console.log('get userAuth instance success');
154      //开始认证
155      userAuthInstance.start();
156      console.log('auth start success');
157      // 取消认证
158      userAuthInstance.cancel();
159      console.log('auth cancel success');
160    } catch (error) {
161      console.error('auth catch error: ' + JSON.stringify(error));
162    }
163    ```
164