鸿蒙(HarmonyOS)中的 auth
工具主要是指用于用户认证和授权的功能模块。它允许开发者集成用户身份验证(如账号密码登录、生物识别等)和授权管理(如访问令牌的获取和管理)功能。在鸿蒙应用开发中,通常使用@ohos.account.appAuth
这个模块来实现这些功能。
作用
- 用户认证(Authentication):验证用户的身份,例如通过账号密码、指纹、人脸识别等方式。
- 授权(Authorization):获取用户授权,以便应用可以访问用户数据或执行某些操作(比如访问用户云端账户信息)。
- 令牌管理:管理认证后的令牌(如OAuth2.0的access token),包括获取、刷新和验证令牌等。
使用步骤
下面是一个基本的使用流程:
- 导入模块
javascript 复制 import appAccount from '@ohos.account.appAuth';
- 创建认证请求对象
你需要定义一个'AuthParams'对象,指定认证的类型(如密码、指纹等)以及其他参数。
... javascript 复制 let authParams = { authType: appAccount.AuthType.ALL, // 认证类型,可以是密码、指纹等 authTrustLevel: appAccount.AuthTrustLevel.EL1 // 认证信任等级 }; ...
3. 创建认证请求
使用createAuth
方法创建认证请求,并传入一个回调函数用于接收认证结果。
javascript
javascript
复制
let authRequest = {
authType: appAccount.AuthType.ALL,
abilityStartInfo: {
bundleName: "com.example.myapp",
abilityName: "com.example.myapp.MainAbility",
action: "action.auth"
}
};
// 创建认证请求
appAccount.createAuth(authRequest, (err, data) => {
if (err) {
console.error("createAuth failed, error: " + JSON.stringify(err));
return;
}
console.log("createAuth success, data: " + JSON.stringify(data));
// 这里可以保存data中的authResult,用于后续的认证过程
});
4. 启动认证
当需要用户进行认证时(例如在登录界面),调用startAuth
方法启动认证流程。
javascript
javascript
复制
// 假设我们有一个按钮,点击触发认证
Button('登录')
.onClick(() => {
// 启动认证
appAccount.startAuth(authRequest)
.then(data => {
console.log("startAuth success, data: " + JSON.stringify(data));
// 认证成功,处理后续逻辑
})
.catch(err => {
console.error("startAuth failed, error: " + JSON.stringify(err));
});
});
5. 处理认证结果
在认证过程中,用户可能会成功完成认证,也可能失败或取消。你需要根据认证结果做出相应处理。
6. 获取授权令牌
在认证成功后,你可能需要获取访问令牌(access token)来访问受保护的资源。
ini
javascript
复制
// 假设认证成功后,你已经保存了authResult
let token = authResult.token; // 获取令牌
let openId = authResult.openId; // 获取用户唯一标识
注意事项
-
使用
appAccount
模块需要相应的权限。在config.json
文件中配置权限:jsonjson 复制 { "reqPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }, { "name": "ohos.permission.INTERNET" }, { "name": "ohos.permission.GET_APP_ACCOUNTS" } ] }
注意:具体权限可能根据你的功能需求而有所不同。
-
在实际开发中,你可能需要对接具体的账号服务(如华为账号服务),这样就需要按照相应的服务提供商的文档来配置。
以上是一个基本的认证流程。具体实现时,请参考鸿蒙官方文档:developer.harmonyos.com/cn/docs/doc...
如果你使用的是特定的第三方认证(如微信登录、华为账号登录),你可能需要使用相应的SDK,并遵循其集成步骤。
在鸿蒙(HarmonyOS)系统中,封装 auth
工具主要用于简化用户身份验证流程,提供一套统一、安全的接口供开发者调用。它负责处理用户登录、权限校验、会话管理等操作,确保设备或应用的安全访问控制。
核心作用
- 身份认证(Authentication)
验证用户身份的真实性(如账号密码、生物识别、扫码登录等)。 - 权限控制(Authorization)
校验用户是否有权访问特定功能或资源(如读写设备数据、调用敏感 API)。 - 会话管理
维护用户登录状态(如 Token 过期刷新、安全退出)。 - 安全隔离
基于鸿蒙的分布式安全架构,保障跨设备通信时的数据安全。
使用步骤(以 JS/TS 开发为例)
1. 封装 auth
工具类
创建 AuthUtils.ets
文件,实现核心逻辑:
typescript
typescript
复制
// AuthUtils.ets
import featureAbility from '@ohos.ability.featureAbility';
import userIAM_userAuth from '@ohos.userIAM.userAuth'; // 用户认证API
import settings from '@ohos.settings'; // 系统设置(可选)
export class AuthUtils {
// 认证类型:密码/指纹/人脸等
private static authType = userIAM_userAuth.UserAuthType.PIN;
// 执行身份认证
static async authenticate(): Promise<boolean> {
try {
// 1. 创建认证对象
const auth = userIAM_userAuth.getAuthInstance({
authType: this.authType,
executor: featureAbility.getContext()
});
// 2. 启动认证(如弹出系统级指纹验证)
const result = await auth.execute();
return result === userIAM_userAuth.ResultCode.SUCCESS;
} catch (err) {
console.error(`Auth failed: ${JSON.stringify(err)}`);
return false;
}
}
// 检查权限(示例:检查相机权限)
static checkPermission(permission: string): boolean {
const context = featureAbility.getContext();
return context.verifyPermission(permission) === 0; // 0 表示授权
}
// 管理Token(例如保存到本地)
static saveToken(token: string): void {
settings.putString('auth_token', token);
}
}
2. 在页面中使用
在需要验证的页面(如 LoginPage.ets
)调用:
typescript
typescript
复制
// LoginPage.ets
import { AuthUtils } from './AuthUtils';
@Entry
@Component
struct LoginPage {
@State loginStatus: string = '未登录';
// 点击登录按钮
async onLoginClick() {
// 步骤1: 身份认证(如验证指纹)
const isAuthenticated = await AuthUtils.authenticate();
if (!isAuthenticated) {
this.loginStatus = '认证失败!';
return;
}
// 步骤2: 检查权限(可选)
const hasCameraPermission = AuthUtils.checkPermission('ohos.permission.CAMERA');
if (!hasCameraPermission) {
this.loginStatus = '无相机权限';
return;
}
// 步骤3: 执行登录逻辑(如获取Token)
const token = 'xxx'; // 从服务器获取的Token
AuthUtils.saveToken(token);
this.loginStatus = '登录成功!';
}
build() {
Column() {
Button('点击登录')
.onClick(() => this.onLoginClick())
Text(this.loginStatus)
}
}
}
安全增强实践
-
生物识别集成
使用
@ohos.userIAM.userAuth
接入系统级指纹/人脸验证,避免明文存储密码。 -
分布式安全
跨设备调用时,通过
@ohos.distributedHardware.deviceManager
校验设备合法性。 -
动态权限管理
敏感操作前通过
abilityAccessCtrl
动态申请权限:javascripttypescript 复制 import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; const atManager = abilityAccessCtrl.createAtManager(); atManager.requestPermissionsFromUser(['ohos.permission.CAMERA'], (err) => {...});
-
Token 自动刷新
使用
@ohos.net.http
拦截请求,在 Token 过期时自动刷新:scsstypescript 复制 http.createHttp().on('headerReceive', (err, data) => { if (data.code === 401) { // Token过期 refreshToken().then(newToken => updateRequests(newToken)); } });
关键注意事项
-
权限声明
在
module.json5
中声明所需权限:jsonjson 复制 { "requestPermissions": [ { "name": "ohos.permission.ACCESS_BIOMETRIC" }, { "name": "ohos.permission.CAMERA" } ] }
-
多因子认证
对高风险操作(如支付)组合多种认证方式:
csharptypescript 复制 // 先密码验证,再人脸验证 await AuthUtils.authenticate(AuthType.PIN); await AuthUtils.authenticate(AuthType.FACE);
-
错误处理
区分认证失败原因(用户取消 vs 系统错误),提供友好提示。
通过封装 auth
工具,开发者可以聚焦业务逻辑,而无需重复实现底层安全机制,同时确保符合鸿蒙的安全规范要求。