# @ohos.userIAM.userAuth (用户认证)(系统接口)
提供用户认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。
> **说明:**
>
> - 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> - 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.userIAM.userAuth (用户认证)](js-apis-useriam-userauth.md)。
## 导入模块
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
```
## WindowModeType10+
用户认证界面的显示类型。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
| 名称 | 值 | 说明 |
| ---------- | ---- | ---------- |
| DIALOG_BOX | 1 | 弹框类型。 |
| FULLSCREEN | 2 | 全屏类型。 |
## WidgetParam10+
用户认证界面配置相关参数。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
| 名称 | 类型 | 必填 | 说明 |
| -------------------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
| windowMode | [WindowModeType](#windowmodetype10) | 否 | 代表用户认证界面的显示类型,默认值为WindowModeType.DIALOG_BOX。
**系统接口**: 此接口为系统接口。 |
## NoticeType10+
用户身份认证的通知类型。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
| 名称 | 值 | 说明 |
| ------------- | ---- | -------------------- |
| WIDGET_NOTICE | 1 | 表示来自组件的通知。 |
## userAuth.sendNotice10+
sendNotice(noticeType: NoticeType, eventData: string): void
在使用统一身份认证控件进行用户身份认证时,用于接收来自统一身份认证控件的通知。
**需要权限**:ohos.permission.SUPPORT_USER_AUTH
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | --------------------------- | ---- | ---------- |
| noticeType | [NoticeType](#noticetype10) | 是 | 通知类型。 |
| eventData | string | 是 | 事件数据。 |
**错误码:**
以下错误码的详细介绍请参见[用户认证错误码](errorcode-useriam.md)。
| 错误码ID | 错误信息 |
| -------- | --------------------------------------- |
| 201 | Permission verification failed. |
| 202 | The caller is not a system application. |
| 401 | Incorrect parameters. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 12500002 | General operation error. |
**示例:**
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
interface EventData {
widgetContextId: number;
event: string;
version: string;
payload: PayLoad;
}
interface PayLoad {
type: Object[];
}
try {
const eventData : EventData = {
widgetContextId: 123456,
event: 'EVENT_AUTH_TYPE_READY',
version: '1',
payload: {
type: ['pin']
} as PayLoad,
};
const jsonEventData = JSON.stringify(eventData);
let noticeType = userAuth.NoticeType.WIDGET_NOTICE;
userAuth.sendNotice(noticeType, jsonEventData);
console.info('sendNotice success');
} catch (error) {
console.error(`sendNotice catch error: ${JSON.stringify(error)}`);
}
```
## UserAuthWidgetMgr10+
组件管理接口,可将用身份认证控件注册到UserAuthWidgetMgr中,由UserAuthWidgetMgr进行管理、调度。
### on10+
on(type: 'command', callback: IAuthWidgetCallback): void
身份认证控件订阅来自用户认证框架的命令。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | 'command' | 是 | 订阅事件类型,表明该事件用于用户认证框架向身份认证控件发送命令。 |
| callback | [IAuthWidgetCallback](#iauthwidgetcallback10) | 是 | 组件管理接口的回调函数,用于用户认证框架向身份认证控件发送命令。 |
**错误码:**
以下错误码的详细介绍请参见[用户认证错误码](errorcode-useriam.md)。
| 错误码ID | 错误信息 |
| -------- | ------------------------ |
| 401 | Incorrect parameters. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 12500002 | General operation error. |
**示例:**
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
const userAuthWidgetMgrVersion = 1;
try {
let userAuthWidgetMgr = userAuth.getUserAuthWidgetMgr(userAuthWidgetMgrVersion);
console.info('get userAuthWidgetMgr instance success');
userAuthWidgetMgr.on('command', {
sendCommand(cmdData) {
console.info(`The cmdData is ${cmdData}`);
}
})
console.info('subscribe authentication event success');
} catch (error) {
console.error(`userAuth widgetMgr catch error: ${JSON.stringify(error)}`);
}
```
### off10+
off(type: 'command', callback?: IAuthWidgetCallback): void
身份认证控件取消订阅来自用户认证框架的命令。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------------------------- | ---- | ------------------------------------------------------------ |
| type | 'command' | 是 | 订阅事件类型,表明该事件用于用户认证框架向身份认证控件发送命令。 |
| callback | [IAuthWidgetCallback](#iauthwidgetcallback10) | 否 | 组件管理接口的回调函数,用于用户认证框架向身份认证控件发送命令。 |
**错误码:**
以下错误码的详细介绍请参见[用户认证错误码](errorcode-useriam.md)。
| 错误码ID | 错误信息 |
| -------- | ------------------------ |
| 401 | Incorrect parameters. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 12500002 | General operation error. |
**示例:**
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
const userAuthWidgetMgrVersion = 1;
try {
let userAuthWidgetMgr = userAuth.getUserAuthWidgetMgr(userAuthWidgetMgrVersion);
console.info('get userAuthWidgetMgr instance success');
userAuthWidgetMgr.off('command', {
sendCommand(cmdData) {
console.info(`The cmdData is ${cmdData}`);
}
})
console.info('cancel subscribe authentication event success');
} catch (error) {
console.error(`userAuth widgetMgr catch error: ${JSON.stringify(error)}`);
}
```
## userAuth.getUserAuthWidgetMgr10+
getUserAuthWidgetMgr(version: number): UserAuthWidgetMgr
获取UserAuthWidgetMgr对象,用于执行用户身份认证。
> **说明:**
> 每个UserAuthInstance只能进行一次认证,若需要再次进行认证则需重新获取UserAuthInstance。
**需要权限**:ohos.permission.SUPPORT_USER_AUTH
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------ | ---- | -------------------- |
| version | number | 是 | 表示认证组件的版本。 |
**返回值:**
| 类型 | 说明 |
| ----------------------------------------- | ------------ |
| [UserAuthWidgetMgr](#userauthwidgetmgr10) | 认证器对象。 |
**错误码:**
以下错误码的详细介绍请参见[用户认证错误码](errorcode-useriam.md)。
| 错误码ID | 错误信息 |
| -------- | --------------------------------------- |
| 201 | Permission verification failed. |
| 202 | The caller is not a system application. |
| 401 | Incorrect parameters. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
| 12500002 | General operation error. |
**示例:**
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
let userAuthWidgetMgrVersion = 1;
try {
let userAuthWidgetMgr = userAuth.getUserAuthWidgetMgr(userAuthWidgetMgrVersion);
console.info('get userAuthWidgetMgr instance success');
} catch (error) {
console.error(`userAuth widgetMgr catch error: ${JSON.stringify(error)}`);
}
```
## IAuthWidgetCallback10+
认证组件通过该回调获取用户认证框架发送的命令。
### sendCommand10+
sendCommand(cmdData: string): void
回调函数,用于用户认证框架向组件发送命令。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
**系统接口**: 此接口为系统接口。
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------ | ---- | ---------------------------------- |
| cmdData | string | 是 | 用户身份认证框架向控件发送的命令。 |
**示例:**
```ts
import { userAuth } from '@kit.UserAuthenticationKit';
const userAuthWidgetMgrVersion = 1;
try {
let userAuthWidgetMgr = userAuth.getUserAuthWidgetMgr(userAuthWidgetMgrVersion);
console.info('get userAuthWidgetMgr instance success');
userAuthWidgetMgr.on('command', {
sendCommand(cmdData) {
console.info(`The cmdData is ${cmdData}`);
}
})
console.info('subscribe authentication event success');
} catch (error) {
console.error(`userAuth widgetMgr catch error: ${JSON.stringify(error)}`);
}
```
## UserAuthType8+
表示身份认证的凭据类型枚举。
**系统能力**:SystemCapability.UserIAM.UserAuth.Core
| 名称 | 值 | 说明 |
| ----------- | ---- | ---------- |
| PRIVATE_PIN14+ | 16 | 隐私口令。 |
**示例:**
发起用户认证,采用认证可信等级≥ATL3的隐私密码认证,获取认证结果:
```ts
import { BusinessError } from '@kit.BasicServicesKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { userAuth } from '@kit.UserAuthenticationKit';
try {
const rand = cryptoFramework.createRandom();
const len: number = 16;
const randData: Uint8Array = rand?.generateRandomSync(len)?.data;
const authParam: userAuth.AuthParam = {
challenge: randData,
authType: [userAuth.UserAuthType.PRIVATE_PIN],
authTrustLevel: userAuth.AuthTrustLevel.ATL3,
};
const widgetParam: userAuth.WidgetParam = {
title: '请输入密码',
};
const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);
console.info('get userAuth instance success');
// 需要调用UserAuthInstance的start()接口,启动认证后,才能通过onResult获取到认证结果。
userAuthInstance.on('result', {
onResult (result) {
console.info(`userAuthInstance callback result = ${JSON.stringify(result)}`);
}
});
console.info('auth on success');
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);
}
```