• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理系统账号凭据(仅对系统应用开放)
2
3<!--Kit: Basic Services Kit-->
4<!--Subsystem: Account-->
5<!--Owner: @steven-q-->
6<!--Designer: @JiDong-CS1-->
7<!--Tester: @zhaimengchao-->
8<!--Adviser: @zengyawen-->
9
10凭据可用于认证用户的身份,本文档将介绍如何录入、认证、更新、查询和删除指定系统账号的凭据。
11
12## 凭据类型
13
14系统账号支持管理以下凭据类型:
15
16| 名称  | 值 | 说明             |
17| ----- | ----- | ---------------- |
18| PIN   | 1     | 表示PIN认证类型。 |
19| FACE  | 2     | 表示人脸认证类型。|
20| FINGERPRINT<sup>10+</sup>   | 4     | 表示指纹认证类型。 |
21
22## 凭据子类型
23
24凭据类型进一步细分为以下子类型:
25
26> **说明:**
27> 实际设备可支持的凭据类型取决于硬件能力。
28
29| 名称       | 值 | 说明               |
30| ---------- | ----- | ------------------ |
31| PIN_SIX    | 10000 | 表示6位凭证。       |
32| PIN_NUMBER | 10001 | 表示自定义数字凭证。 |
33| PIN_MIXED  | 10002 | 表示自定义混合凭据。 |
34| FACE_2D    | 20000 | 表示2D人脸凭证。   |
35| FACE_3D    | 20001 | 表示3D人脸凭证。   |
36| FINGERPRINT_CAPACITIVE<sup>10+</sup>    | 30000 | 表示电容式指纹。   |
37| FINGERPRINT_OPTICAL<sup>10+</sup>    | 30001 | 表示光学指纹。   |
38| FINGERPRINT_ULTRASONIC<sup>10+</sup>    | 30002 | 表示超声波指纹。   |
39
40## 开发准备
41
421. 申请权限,申请流程请参考:[申请应用权限](../../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)。
43   - ohos.permission.MANAGE_USER_IDM
44   - ohos.permission.ACCESS_PIN_AUTH
45
462. 导入系统账号模块。
47
48   ```ts
49   import { osAccount } from '@kit.BasicServicesKit';
50   ```
51
523. 创建凭据管理对象。
53
54   ```ts
55   let userIDM: osAccount.UserIdentityManager = new osAccount.UserIdentityManager();
56   ```
57
58## 注册PIN码输入器
59
60输入器用于传递PIN码数据,录入、认证PIN码前需要先注册输入器。
61
62具体开发实例如下:
63
641. 定义PIN码输入器,并获取PIN码。
65
66   ```ts
67   let pinData: Uint8Array = new Uint8Array([31, 32, 33, 34, 35, 36]); // you can obtain a PIN throught other ways.
68   let inputer: osAccount.IInputer = {
69     onGetData: (authSubType: osAccount.AuthSubType, callback: osAccount.IInputData) => {
70       callback.onSetData(authSubType, pinData);
71     }
72   }
73   ```
74
752. 调用[registerInputer](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerinputer8)注册PIN码输入器。
76
77   ```ts
78   let pinAuth: osAccount.PINAuth = new osAccount.PINAuth();
79   pinAuth.registerInputer(inputer);
80   ```
81
82## 打开会话
83
84在进行凭据管理前,请先打开一个新的会话。开发者可以使用[openSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#opensession8)接口完成此操作。
85
86具体开发实例如下:
87
88调用[openSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#opensession8)接口一个新的凭据管理会话。
89
90   ```ts
91   let challenge: Uint8Array = await userIDM.openSession();
92   ```
93
94## 录入PIN码
95
96前述操作完成后,可以进行PIN码录入。开发者可以使用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)接口完成此操作。
97
98具体开发实例如下:
99
1001. 定义PIN码凭据信息。
101
102   ```ts
103   let credentialInfo: osAccount.CredentialInfo = {
104     credType: osAccount.AuthType.PIN,
105     credSubType: osAccount.AuthSubType.PIN_SIX,
106     token: new Uint8Array([0])
107   };
108   ```
109
1102. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)接口添加指定的凭据信息,执行结果通过回调获取。
111
112   ```ts
113   userIDM.addCredential(credentialInfo, {
114     onResult: (code: number, result: osAccount.RequestResult) => {
115       console.info('addCredential code = ' + code);
116       console.info('addCredential result = ' + result);
117     }
118   });
119   ```
120
121## 认证PIN码
122
123录入完PIN码,用户可以进行PIN码认证。开发者可以使用[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接口完成此操作。
124
125具体开发实例如下:
126
1271. 定义认证参数,包括挑战值、认证类型、认证可信等级。
128
129   ```ts
130   let challenge: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]);
131   let authType: osAccount.AuthType = osAccount.AuthType.PIN;
132   let authTrustLevel: osAccount.AuthTrustLevel = osAccount.AuthTrustLevel.ATL1;
133   ```
134
1352. 调用[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接口进行认证。
136
137   ```ts
138   let userAuth: osAccount.UserAuth = new osAccount.UserAuth();
139   userAuth.auth(challenge, authType, authTrustLevel, {
140     onResult: (result: number, extraInfo: osAccount.AuthResult) => {
141       console.info('pin auth result = ' + result);
142       console.info('pin auth extraInfo = ' + JSON.stringify(extraInfo));
143       let authToken = extraInfo.token;
144     }
145   });
146   ```
147
148## 录入生物识别凭据
149
150PIN码认证成功后,可以录入人脸/指纹,操作流程与录入PIN码类似。
151
152具体开发实例如下:
153
1541. 认证PIN码,获取授权令牌authToken。
155
1562. 定义人脸凭据信息(以2D人脸为例)。
157
158   ```ts
159   let faceCredInfo: osAccount.CredentialInfo = {
160     credType: osAccount.AuthType.FACE,
161     credSubType: osAccount.AuthSubType.FACE_2D,
162     token: new Uint8Array([1, 2, 3, 4, 5])
163   }
164   ```
165
1663. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)录入人脸凭据。
167
168   ```ts
169   userIDM.addCredential(faceCredInfo, {
170     onResult: (code: number, result: osAccount.RequestResult) => {
171       console.info('add face credential, resultCode: ' + code);
172       console.info('add face credential, request result: ' + result);
173     }
174   });
175   ```
176
1774. 定义指纹凭据信息。
178
179   ```ts
180   let fingerprintCredInfo: osAccount.CredentialInfo = {
181     credType: osAccount.AuthType.FINGERPRINT,
182     credSubType: osAccount.AuthSubType.FINGERPRINT_CAPACITIVE,
183     token: new Uint8Array([1, 2, 3, 4, 5])
184   }
185   ```
186
1875. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)录入指纹凭据。
188
189   ```ts
190   userIDM.addCredential(fingerprintCredInfo, {
191     onResult: (code: number, result: osAccount.RequestResult) => {
192       console.info('add fingerprint credential, resultCode: ' + code);
193       console.info('add fingerprint credential, request result: ' + result);
194     }
195   });
196   ```
197
198## 认证生物识别凭据
199
200录入生物识别凭据后,用户可以进行生物识别认证。类似PIN码认证,开发者可以使用[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接口完成此操作。
201
202具体开发实例如下:
203
2041. 定义认证参数(以人脸认证为例),包括挑战值、认证类型、认证可信等级。
205
206   ```ts
207   let challenge: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]);
208   let authType: osAccount.AuthType = osAccount.AuthType.FACE;
209   let authTrustLevel: osAccount.AuthTrustLevel = osAccount.AuthTrustLevel.ATL1;
210   ```
211
2122. 调用auth接口进行认证。
213
214   ```ts
215   let userAuth: osAccount.UserAuth = new osAccount.UserAuth();
216   userAuth.auth(challenge, authType, authTrustLevel, {
217     onResult: (result: number, extraInfo: osAccount.AuthResult) => {
218       console.info('face auth result = ' + result);
219       console.info('face auth extraInfo = ' + JSON.stringify(extraInfo));
220     }
221   });
222   ```
223
224## 更新凭据
225
226用户可以修改系统账号的凭据。开发者可以使用[updateCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#updatecredential8)接口完成此操作。
227
228具体开发实例如下:
229
2301. 认证PIN码,获取授权令牌authToken。
231
2322. 定义待更新凭据信息。
233
234   ```ts
235   let credentialInfo: osAccount.CredentialInfo = {
236     credType: osAccount.AuthType.PIN,
237     credSubType: osAccount.AuthSubType.PIN_SIX,
238     token: new Uint8Array([1, 2, 3, 4, 5])
239   };
240   ```
241
2423. 调用[updateCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#updatecredential8)更新凭据。
243
244   ```ts
245   userIDM.updateCredential(credentialInfo, {
246     onResult: (result: number, extraInfo: osAccount.RequestResult) => {
247       console.info('updateCredential result = ' + result);
248       console.info('updateCredential extraInfo = ' + extraInfo);
249     }
250   });
251   ```
252
253## 查询凭据信息
254
255凭据管理界面需要向用户展示已录入的凭据信息;锁屏界面需要展示可认证的凭据类型。开发者可以使用[getAuthInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getauthinfo8)接口查询已录入的凭据信息,实现前述业务场景功能。
256
257具体开发实例如下:
258
2591. 查询所有已录入的凭据信息。
260
261   ```ts
262   let enrolledCredInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo();
263   ```
264
2652. 调用[getAuthInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getauthinfo8)接口,获取指定类型的凭据信息(以指纹凭据为例)。
266
267   ```ts
268   let enrolledFingerCredInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo(osAccount.AuthType.FINGERPRINT);
269   ```
270
271## 删除凭据
272
273删除凭据前,需要先进行[认证PIN码](#认证pin码),并获取待删除凭据的标识(参考[查询凭据信息](#查询凭据信息))。
274
275以删除指纹凭据为例,具体开发实例如下:
276
2771. 获取指纹类型的凭据信息。
278
279   ```ts
280   let credentialId: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]);
281   let token: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]);
282   let credInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo(osAccount.AuthType.FINGERPRINT);
283   if (credInfoList.length != 0) {
284     credentialId = credInfoList[0].credentialId;
285   }
286   ```
287
2882. [认证PIN码](#认证pin码),获取授权令牌。
289
2903. 调用[delCred](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#delcred8)接口,删除指定凭据。
291
292   ```ts
293   userIDM.delCred(credentialId, token, {
294     onResult: (result: number, extraInfo: osAccount.RequestResult) => {
295       console.info('delCred result = ' + result);
296       console.info('delCred extraInfo = ' + JSON.stringify(extraInfo));
297     }
298   });
299   ```
300
301## 注销PIN码输入器
302
303不再使用输入器时,可以调用[unregisterInputer](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#unregisterinputer8)注销PIN码输入器。
304
305具体开发实例如下:
306
307```ts
308pinAuth.unregisterInputer();
309```
310
311## 关闭会话
312
313调用[closeSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#closesession8)关闭会话,结束凭据管理。
314
315具体开发实例如下:
316
317```ts
318userIDM.closeSession();
319```
320