# 管ç†ç³»ç»Ÿè´¦å·å‡æ®ï¼ˆä»…对系统应用开放) 凿®å¯ç”¨äºŽè®¤è¯ç”¨æˆ·çš„身份,本文档将介ç»å¦‚何录入ã€è®¤è¯ã€æ›´æ–°ã€æŸ¥è¯¢å’Œåˆ 除指定系统账å·çš„凿®ã€‚ ## 凿®ç±»åž‹ ç³»ç»Ÿè´¦å·æ”¯æŒç®¡ç†ä»¥ä¸‹å‡æ®ç±»åž‹ï¼š | åç§° | 值 | 说明 | | ----- | ----- | ---------------- | | PIN | 1 | 表示PIN认è¯ç±»åž‹ã€‚ | | FACE | 2 | 表示人脸认è¯ç±»åž‹ã€‚| | FINGERPRINT<sup>10+</sup> | 4 | 表示指纹认è¯ç±»åž‹ã€‚ | ## 凿®å类型 凿®ç±»åž‹è¿›ä¸€æ¥ç»†åˆ†ä¸ºä»¥ä¸‹å类型: > **说明:** > å®žé™…è®¾å¤‡å¯æ”¯æŒçš„凿®ç±»åž‹å–决于硬件能力。 | åç§° | 值 | 说明 | | ---------- | ----- | ------------------ | | PIN_SIX | 10000 | 表示6ä½å‡è¯ã€‚ | | PIN_NUMBER | 10001 | 表示自定义数å—å‡è¯ã€‚ | | PIN_MIXED | 10002 | 表示自定义混åˆå‡æ®ã€‚ | | FACE_2D | 20000 | 表示2D 人脸å‡è¯ã€‚ | | FACE_3D | 20001 | 表示3D 人脸å‡è¯ã€‚ | | FINGERPRINT_CAPACITIVE<sup>10+</sup> | 30000 | è¡¨ç¤ºç”µå®¹å¼æŒ‡çº¹ã€‚ | | FINGERPRINT_OPTICAL<sup>10+</sup> | 30001 | è¡¨ç¤ºå…‰å¦æŒ‡çº¹ã€‚ | | FINGERPRINT_ULTRASONIC<sup>10+</sup> | 30002 | 表示超声波指纹。 | ## å¼€å‘准备 1. 申请æƒé™ï¼Œç”³è¯·æµç¨‹è¯·å‚考:[申请应用æƒé™](../../security/AccessToken/determine-application-mode.md#system_basicç‰çº§åº”用申请æƒé™çš„æ–¹å¼)。 - ohos.permission.MANAGE_USER_IDM - ohos.permission.ACCESS_PIN_AUTH 2. å¯¼å…¥ç³»ç»Ÿè´¦å·æ¨¡å—。 ```ts import { osAccount } from '@kit.BasicServicesKit'; ``` 3. åˆ›å»ºå‡æ®ç®¡ç†å¯¹è±¡ã€‚ ```ts let userIDM: osAccount.UserIdentityManager = new osAccount.UserIdentityManager(); ``` ## 注册PINç 输入器 è¾“å…¥å™¨ç”¨äºŽä¼ é€’PINç æ•°æ®ï¼Œå½•å…¥ã€è®¤è¯PINç å‰éœ€è¦å…ˆæ³¨å†Œè¾“入器。 具体开å‘实例如下: 1. 定义PINç 输入器,并获å–PINç 。 ```ts let pinData: Uint8Array = new Uint8Array([31, 32, 33, 34, 35, 36]); // you can obtain a PIN throught other ways. let inputer: osAccount.IInputer = { onGetData: (authSubType: osAccount.AuthSubType, callback: osAccount.IInputData) => { callback.onSetData(authSubType, pinData); } } ``` 2. 调用[registerInputer](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerinputer8)注册PINç 输入器。 ```ts let pinAuth: osAccount.PINAuth = new osAccount.PINAuth(); pinAuth.registerInputer(inputer); ``` ## æ‰“å¼€ä¼šè¯ åœ¨è¿›è¡Œå‡æ®ç®¡ç†å‰ï¼Œè¯·å…ˆæ‰“开一个新的会è¯ã€‚å¼€å‘者å¯ä»¥ä½¿ç”¨[openSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#opensession8)接å£å®Œæˆæ¤æ“作。 具体开å‘实例如下: 调用[openSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#opensession8)æŽ¥å£æ‰“开凿®ç®¡ç†æ–°ä¼šè¯ã€‚ ```ts let challenge: Uint8Array = await userIDM.openSession(); ``` ## 录入PINç å‰è¿°æ“作完æˆåŽï¼Œå¯ä»¥è¿›è¡ŒPINç 录入。开å‘者å¯ä»¥ä½¿ç”¨[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)接å£å®Œæˆæ¤æ“作。 具体开å‘实例如下: 1. 定义PINç 凿®ä¿¡æ¯ã€‚ ```ts let credentialInfo: osAccount.CredentialInfo = { credType: osAccount.AuthType.PIN, credSubType: osAccount.AuthSubType.PIN_SIX, token: new Uint8Array([0]) }; ``` 2. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)æŽ¥å£æ·»åŠ æŒ‡å®šçš„å‡æ®ä¿¡æ¯ï¼Œæ‰§è¡Œç»“果通过回调获å–。 ```ts userIDM.addCredential(credentialInfo, { onResult: (code: number, result: osAccount.RequestResult) => { console.log('addCredential code = ' + code); console.log('addCredential result = ' + result); } }); ``` ## 认è¯PINç 录入完PINç ,用户å¯ä»¥è¿›è¡ŒPINç 认è¯ã€‚å¼€å‘者å¯ä»¥ä½¿ç”¨[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接å£å®Œæˆæ¤æ“作。 具体开å‘实例如下: 1. 定义认è¯å‚数,包括挑战值ã€è®¤è¯ç±»åž‹ã€è®¤è¯å¯ä¿¡ç‰çº§ã€‚ ```ts let challenge: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]); let authType: osAccount.AuthType = osAccount.AuthType.PIN; let authTrustLevel: osAccount.AuthTrustLevel = osAccount.AuthTrustLevel.ATL1; ``` 2. 调用[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接å£è¿›è¡Œè®¤è¯ã€‚ ```ts let userAuth: osAccount.UserAuth = new osAccount.UserAuth(); userAuth.auth(challenge, authType, authTrustLevel, { onResult: (result: number, extraInfo: osAccount.AuthResult) => { console.log('pin auth result = ' + result); console.log('pin auth extraInfo = ' + JSON.stringify(extraInfo)); let authToken = extraInfo.token; } }); ``` ## å½•å…¥ç”Ÿç‰©è¯†åˆ«å‡æ® PINç è®¤è¯æˆåŠŸåŽï¼Œå¯ä»¥å½•入人脸/指纹,æ“作æµç¨‹ä¸Žå½•å…¥PINç 类似。 具体开å‘实例如下: 1. 认è¯PINç ï¼ŒèŽ·å–æŽˆæƒä»¤ç‰ŒauthToken。 2. å®šä¹‰äººè„¸å‡æ®ä¿¡æ¯ï¼ˆä»¥2D人脸为例)。 ```ts let faceCredInfo: osAccount.CredentialInfo = { credType: osAccount.AuthType.FACE, credSubType: osAccount.AuthSubType.FACE_2D, token: new Uint8Array([1, 2, 3, 4, 5]) } ``` 3. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)å½•å…¥äººè„¸å‡æ®ã€‚ ```ts userIDM.addCredential(faceCredInfo, { onResult: (code: number, result: osAccount.RequestResult) => { console.log('add face credential, resultCode: ' + code); console.log('add face credential, request result: ' + result); } }); ``` 4. å®šä¹‰æŒ‡çº¹å‡æ®ä¿¡æ¯ã€‚ ```ts let fingerprintCredInfo: osAccount.CredentialInfo = { credType: osAccount.AuthType.FINGERPRINT, credSubType: osAccount.AuthSubType.FINGERPRINT_CAPACITIVE, token: new Uint8Array([1, 2, 3, 4, 5]) } ``` 5. 调用[addCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#addcredential8)å½•å…¥æŒ‡çº¹å‡æ®ã€‚ ```ts userIDM.addCredential(fingerprintCredInfo, { onResult: (code: number, result: osAccount.RequestResult) => { console.log('add fingerprint credential, resultCode: ' + code); console.log('add fingerprint credential, request result: ' + result); } }); ``` ## 认è¯ç”Ÿç‰©è¯†åˆ«å‡æ® å½•å…¥å®Œç”Ÿç‰©è¯†åˆ«å‡æ®åŽï¼Œç”¨æˆ·å¯ä»¥è¿›è¡Œç”Ÿç‰©è¯†åˆ«è®¤è¯ã€‚类似PINç 认è¯ï¼Œå¼€å‘者å¯ä»¥ä½¿ç”¨[auth](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#auth8)接å£å®Œæˆæ¤æ“作。 具体开å‘实例如下: 1. 定义认è¯å‚数(以人脸认è¯ä¸ºä¾‹ï¼‰ï¼ŒåŒ…括挑战值ã€è®¤è¯ç±»åž‹ã€è®¤è¯å¯æ€§ç‰çº§ã€‚ ```ts let challenge: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]); let authType: osAccount.AuthType = osAccount.AuthType.FACE; let authTrustLevel: osAccount.AuthTrustLevel = osAccount.AuthTrustLevel.ATL1; ``` 2. 调用auth接å£è¿›è¡Œè®¤è¯ã€‚ ```ts let userAuth: osAccount.UserAuth = new osAccount.UserAuth(); userAuth.auth(challenge, authType, authTrustLevel, { onResult: (result: number, extraInfo: osAccount.AuthResult) => { console.log('face auth result = ' + result); console.log('face auth extraInfo = ' + JSON.stringify(extraInfo)); } }); ``` ## æ›´æ–°å‡æ® 用户å¯ä»¥ä¿®æ”¹ç³»ç»Ÿè´¦å·çš„凿®ã€‚å¼€å‘者å¯ä»¥ä½¿ç”¨[updateCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#updatecredential8)接å£å®Œæˆæ¤æ“作。 具体开å‘实例如下: 1. 认è¯PINç ï¼ŒèŽ·å–æŽˆæƒä»¤ç‰ŒauthToken。 2. å®šä¹‰å¾…æ›´æ–°å‡æ®ä¿¡æ¯ã€‚ ```ts let credentialInfo: osAccount.CredentialInfo = { credType: osAccount.AuthType.PIN, credSubType: osAccount.AuthSubType.PIN_SIX, token: new Uint8Array([1, 2, 3, 4, 5]) }; ``` 3. 调用[updateCredential](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#updatecredential8)æ›´æ–°å‡æ®ã€‚ ```ts userIDM.updateCredential(credentialInfo, { onResult: (result: number, extraInfo: osAccount.RequestResult) => { console.log('updateCredential result = ' + result); console.log('updateCredential extraInfo = ' + extraInfo); } }); ``` ## æŸ¥è¯¢å‡æ®ä¿¡æ¯ 凿®ç®¡ç†ç•Œé¢éœ€è¦å‘ç”¨æˆ·å±•ç¤ºå·²å½•å…¥çš„å‡æ®ä¿¡æ¯ï¼›é”å±ç•Œé¢éœ€è¦å±•示å¯è®¤è¯çš„凿®ç±»åž‹ã€‚å¼€å‘者å¯ä»¥ä½¿ç”¨[getAuthInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getauthinfo8)æŽ¥å£æŸ¥è¯¢å·²å½•å…¥çš„å‡æ®ä¿¡æ¯ï¼Œå®žçްå‰è¿°ä¸šåŠ¡åœºæ™¯åŠŸèƒ½ã€‚ 具体开å‘实例如下: 1. æŸ¥è¯¢æ‰€æœ‰å·²å½•å…¥çš„å‡æ®ä¿¡æ¯ã€‚ ```ts let enrolledCredInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo(); ``` 2. 调用[getAuthInfo](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#getauthinfo8)接å£ï¼ŒèŽ·å–æŒ‡å®šç±»åž‹çš„凿®ä¿¡æ¯ï¼ˆä»¥æŒ‡çº¹å‡æ®ä¸ºä¾‹ï¼‰ã€‚ ```ts let enrolledFingerCredInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo(osAccount.AuthType.FINGERPRINT); ``` ## åˆ é™¤å‡æ® åˆ é™¤å‡æ®å‰ï¼Œéœ€è¦å…ˆè¿›è¡Œ[认è¯PINç ](#认è¯pinç ),并获å–å¾…åˆ é™¤å‡æ®çš„æ ‡è¯†ï¼ˆå‚考[æŸ¥è¯¢å‡æ®ä¿¡æ¯](#æŸ¥è¯¢å‡æ®ä¿¡æ¯))。 ä»¥åˆ é™¤æŒ‡çº¹å‡æ®ä¸ºä¾‹ï¼Œå…·ä½“å¼€å‘实例如下: 1. èŽ·å–æŒ‡çº¹ç±»åž‹çš„凿®ä¿¡æ¯ã€‚ ```ts let credentialId: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]); let token: Uint8Array = new Uint8Array([1, 2, 3, 4, 5]) let credInfoList: osAccount.EnrolledCredInfo[] = await userIDM.getAuthInfo(osAccount.AuthType.FINGERPRINT); if (credInfoList.length != 0) { credentialId = credInfoList[0].credentialId; } ``` 2. [认è¯PINç ](#认è¯pinç )ï¼ŒèŽ·å–æŽˆæƒä»¤ç‰Œã€‚ 3. 调用[delCred](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#delcred8)接å£ï¼Œåˆ é™¤æŒ‡å®šå‡æ®ã€‚ ```ts userIDM.delCred(credentialId, token, { onResult: (result: number, extraInfo: osAccount.RequestResult) => { console.log('delCred result = ' + result); console.log('delCred extraInfo = ' + JSON.stringify(extraInfo)); } }); ``` ## 注销PINç 输入器 ä¸å†ä½¿ç”¨è¾“入器时,å¯ä»¥è°ƒç”¨[unregisterInputer](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#unregisterinputer8)注销PINç 输入器。 具体开å‘实例如下: ```ts pinAuth.unregisterInputer(); ``` ## å…³é—ä¼šè¯ è°ƒç”¨[closeSession](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#closesession8)å…³é—会è¯ï¼Œç»“æŸå‡æ®ç®¡ç†ã€‚ 具体开å‘实例如下: ```ts userIDM.closeSession(); ```