
鸿蒙中封装一个 auth 工具
鸿蒙(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
复制
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
复制
// 假设我们有一个按钮,点击触发认证
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. 处理认证结果
在认证过程中,用户可能会成功完成认证,也可能失败或取消。你需要根据认证结果做出相应处理。
- 获取授权令牌
在认证成功后,你可能需要获取访问令牌(access token)来访问受保护的资源。
javascript
复制
// 假设认证成功后,你已经保存了authResult
let token = authResult.token; // 获取令牌
let openId = authResult.openId; // 获取用户唯一标识
注意事项
使用appAccount模块需要相应的权限。在config.json文件中配置权限:
json
复制
{
“reqPermissions”: [
{
“name”: “ohos.permission.DISTRIBUTED_DATASYNC”
},
{
“name”: “ohos.permission.INTERNET”
},
{
“name”: “ohos.permission.GET_APP_ACCOUNTS”
}
]
}
注意:具体权限可能根据你的功能需求而有所不同。
在实际开发中,你可能需要对接具体的账号服务(如华为账号服务),这样就需要按照相应的服务提供商的文档来配置。
以上是一个基本的认证流程。具体实现时,请参考鸿蒙官方文档:https://developer.harmonyos.com/cn/docs/documentation/doc-references/account-appauth-0000001081400896
如果你使用的是特定的第三方认证(如微信登录、华为账号登录),你可能需要使用相应的SDK,并遵循其集成步骤。
在鸿蒙(HarmonyOS)系统中,封装 auth 工具主要用于简化用户身份验证流程,提供一套统一、安全的接口供开发者调用。它负责处理用户登录、权限校验、会话管理等操作,确保设备或应用的安全访问控制。
核心作用
身份认证(Authentication)
验证用户身份的真实性(如账号密码、生物识别、扫码登录等)。
权限控制(Authorization)
校验用户是否有权访问特定功能或资源(如读写设备数据、调用敏感 API)。
会话管理
维护用户登录状态(如 Token 过期刷新、安全退出)。
安全隔离
基于鸿蒙的分布式安全架构,保障跨设备通信时的数据安全。
使用步骤(以 JS/TS 开发为例)
- 封装 auth 工具类
创建 AuthUtils.ets 文件,实现核心逻辑:
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
复制
// 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 动态申请权限:
typescript
复制
import abilityAccessCtrl from ‘@ohos.abilityAccessCtrl’;
const atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser([‘ohos.permission.CAMERA’], (err) => {…});
Token 自动刷新
使用 @ohos.net.http 拦截请求,在 Token 过期时自动刷新:
typescript
复制
http.createHttp().on(‘headerReceive’, (err, data) => {
if (data.code === 401) { // Token过期
refreshToken().then(newToken => updateRequests(newToken));
}
});
关键注意事项
权限声明
在 module.json5 中声明所需权限:
json
复制
{
“requestPermissions”: [
{ “name”: “ohos.permission.ACCESS_BIOMETRIC” },
{ “name”: “ohos.permission.CAMERA” }
]
}
多因子认证
对高风险操作(如支付)组合多种认证方式:
typescript
复制
// 先密码验证,再人脸验证
await AuthUtils.authenticate(AuthType.PIN);
await AuthUtils.authenticate(AuthType.FACE);
错误处理
区分认证失败原因(用户取消 vs 系统错误),提供友好提示。
通过封装 auth 工具,开发者可以聚焦业务逻辑,而无需重复实现底层安全机制,同时确保符合鸿蒙的安全规范要求。
