userauth-guidelines.md 4.7 KB
Newer Older
H
https://gitee.com/WALL_EYE 已提交
1 2
# 用户认证开发指导

H
https://gitee.com/WALL_EYE 已提交
3 4
> **说明:**
> 该开发指导匹配@ohos.userIAM.userAuth API Version 8开始支持的接口。
H
https://gitee.com/WALL_EYE 已提交
5

H
https://gitee.com/WALL_EYE 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
## 场景介绍

当前用户认证支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景。

## 接口说明

userIAM_userAuth模块提供了用户认证的相关方法,包括检测认证能力、认证和取消认证等,用户可以使用人脸等生物特征信息进行认证操作。具体接口说明可以查阅[API参考](../reference/apis/js-apis-useriam-userauth.md)

在执行认证前,需要检查设备是否支持该认证能力,具体指认证类型、认证等级。如果不支持,需要考虑使用其他认证能力。

**表1** 用户认证开放能力列表

| 接口名                                                       | 功能描述                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| getVersion() : number                                        | 获取认证对象的版本信息。                                     |
| getAvailableStatus(authType : UserAuthType, authTrustLevel : AuthTrustLevel) : number | 根据指定的认证类型、认证等级,检测当前设备是否支持相应的认证能力。 |
| auth(challenge: Uint8Array, authType: UserAuthType, authTrustLevel: AuthTrustLevel, callback: IUserAuthCallback): Uint8Array | 执行用户认证,使用callback方式作为异步方法。                 |
| cancelAuth(contextID : Uint8Array) : number                  | 通过contextID取消本次认证操作。                              |

## 开发步骤

开发前请完成以下准备工作:

1. 在应用配置权限文件中,增加ohos.permission.ACCESS_BIOMETRIC的权限声明。
2. 在使用用户认证能力的代码文件中增加import userIAM_userAuth from '@ohos.userIAM.userAuth'。

开发过程:

1. 获取Authenticator的单例对象,代码示例如下:

   ```js
   let auth = new userIAM_userAuth.UserAuth();
   ```

H
https://gitee.com/WALL_EYE 已提交
40
2. (可选)获取认证对象的版本信息,代码示例如下:
H
https://gitee.com/WALL_EYE 已提交
41 42

   ```js
H
https://gitee.com/WALL_EYE 已提交
43 44 45
   let auth = new userIAM_userAuth.UserAuth();
   let version = auth.getVersion();
   console.info("auth version = " + version);
H
https://gitee.com/WALL_EYE 已提交
46
   ```
H
https://gitee.com/WALL_EYE 已提交
47

H
https://gitee.com/WALL_EYE 已提交
48 49 50
3. 根据指定的认证类型、认证等级,检测当前设备是否支持相应的认证能力,代码示例如下:

   ```js
H
https://gitee.com/WALL_EYE 已提交
51 52 53 54 55 56 57 58 59
   let auth = new userIAM_userAuth.UserAuth();
   let checkCode = auth.getAvailableStatus(userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1);
   if (checkCode == userIAM_userAuth.ResultCode.SUCCESS) {
       console.info("check auth support success");
       // 此处添加支持指定类型认证的逻辑
   } else {
       console.error("check auth support fail, code = " + checkCode);
       // 此处添加不支持指定类型认证的逻辑
   }
H
https://gitee.com/WALL_EYE 已提交
60 61 62 63 64
   ```

4. 执行认证操作,代码示例如下:

   ```js
H
https://gitee.com/WALL_EYE 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
   let auth = new userIAM_userAuth.UserAuth();
   auth.auth(null, userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1, {
       onResult: (result, extraInfo) => {
           try {
               console.info("auth onResult result = " + result);
               console.info("auth onResult extraInfo = " + JSON.stringify(extraInfo));
               if (result == 'SUCCESS') {
                   // 此处添加认证成功逻辑
               }  else {
                   // 此处添加认证失败逻辑
               }
           } catch (e) {
               console.info("auth onResult error = " + e);
           }
       },

       onAcquireInfo: (module, acquire, extraInfo) => {
           try {
               console.info("auth onAcquireInfo module = " + module);
               console.info("auth onAcquireInfo acquire = " + acquire);
               console.info("auth onAcquireInfo extraInfo = " + JSON.stringify(extraInfo));
           } catch (e) {
               console.info("auth onAcquireInfo error = " + e);
           }
       }
   });
H
https://gitee.com/WALL_EYE 已提交
91 92 93 94 95
   ```

5. 认证过程中取消认证,代码示例如下:

   ```js
H
https://gitee.com/WALL_EYE 已提交
96
   let auth = new userIAM_userAuth.UserAuth();
H
https://gitee.com/WALL_EYE 已提交
97 98 99 100
   // contextId通过auth接口获取
   let contextId = auth.auth(null, userIAM_userAuth.UserAuthType.FACE, userIAM_userAuth.AuthTrustLevel.ATL1, {
       onResult: (result, extraInfo) => {
           console.info("auth onResult result = " + result);
H
https://gitee.com/WALL_EYE 已提交
101
       },
H
https://gitee.com/WALL_EYE 已提交
102 103 104 105 106

       onAcquireInfo: (module, acquire, extraInfo) => {
           console.info("auth onAcquireInfo module = " + module);
       }
   });
H
https://gitee.com/WALL_EYE 已提交
107 108 109 110 111 112
   let cancelCode = auth.cancel(contextId);
   if (cancelCode == userIAM_userAuth.ResultCode.SUCCESS) {
       console.info("cancel auth success");
   } else {
       console.error("cancel auth fail");
   }
H
https://gitee.com/WALL_EYE 已提交
113
   ```