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