封装一个 auth 工具

鸿蒙(HarmonyOS)中的 auth 工具主要是指用于用户认证和授权的功能模块。它允许开发者集成用户身份验证(如账号密码登录、生物识别等)和授权管理(如访问令牌的获取和管理)功能。在鸿蒙应用开发中,通常使用@ohos.account.appAuth这个模块来实现这些功能。

作用

  1. 用户认证(Authentication):验证用户的身份,例如通过账号密码、指纹、人脸识别等方式。
  2. 授权(Authorization):获取用户授权,以便应用可以访问用户数据或执行某些操作(比如访问用户云端账户信息)。
  3. 令牌管理:管理认证后的令牌(如OAuth2.0的access token),包括获取、刷新和验证令牌等。

使用步骤

下面是一个基本的使用流程:

  1. 导入模块

javascript 复制 import appAccount from '@ohos.account.appAuth';

  1. 创建认证请求对象

你需要定义一个'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文件中配置权限:

    json 复制代码
    json
    复制
    {
        "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 工具主要用于简化用户身份验证流程,提供一套统一、安全的接口供开发者调用。它负责处理用户登录、权限校验、会话管理等操作,确保设备或应用的安全访问控制。


核心作用

  1. 身份认证(Authentication)​
    验证用户身份的真实性(如账号密码、生物识别、扫码登录等)。
  2. 权限控制(Authorization)​
    校验用户是否有权访问特定功能或资源(如读写设备数据、调用敏感 API)。
  3. 会话管理
    维护用户登录状态(如 Token 过期刷新、安全退出)。
  4. 安全隔离
    基于鸿蒙的分布式安全架构,保障跨设备通信时的数据安全。

使用步骤(以 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 动态申请权限:

    javascript 复制代码
    typescript
    复制
    import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
    const atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(['ohos.permission.CAMERA'], (err) => {...});
  • Token 自动刷新

    使用 @ohos.net.http 拦截请求,在 Token 过期时自动刷新:

    scss 复制代码
    typescript
    复制
    http.createHttp().on('headerReceive', (err, data) => {
      if (data.code === 401) { // Token过期
        refreshToken().then(newToken => updateRequests(newToken));
      }
    });

关键注意事项

  1. 权限声明

    module.json5 中声明所需权限:

    json 复制代码
    json
    复制
    {
      "requestPermissions": [
        { "name": "ohos.permission.ACCESS_BIOMETRIC" },
        { "name": "ohos.permission.CAMERA" }
      ]
    }
  2. 多因子认证

    对高风险操作(如支付)组合多种认证方式:

    csharp 复制代码
    typescript
    复制
    // 先密码验证,再人脸验证
    await AuthUtils.authenticate(AuthType.PIN);
    await AuthUtils.authenticate(AuthType.FACE);
  3. 错误处理

    区分认证失败原因(用户取消 vs 系统错误),提供友好提示。


通过封装 auth 工具,开发者可以聚焦业务逻辑,而无需重复实现底层安全机制,同时确保符合鸿蒙的安全规范要求。

相关推荐
Georgewu6 小时前
【HarmonyOS】鸿蒙端云一体化开发入门详解 (一)
harmonyos
Georgewu6 小时前
【HarmonyOS】Web 组件的 PDF 文档预览功能详解
harmonyos
Chen--Xing7 小时前
第一届OpenHarmonyCTF--Crypto--WriteUp
网络安全·密码学·harmonyos
HarmonyOS_SDK9 小时前
京东携手HarmonyOS SDK首发家电AR高精摆放功能
harmonyos
塞尔维亚大汉9 小时前
鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统
源码·harmonyos
别说我什么都不会9 小时前
【OpenHarmony】鸿蒙开发之Checksum
harmonyos
周胡杰12 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
simple丶13 小时前
【HarmonyOS】封装用户鉴权工具类
harmonyos·arkts·arkui
simple丶13 小时前
【HarmonyOS】基于Axios封装网络请求工具类
harmonyos·arkts·arkui
万少14 小时前
2-自然壁纸实战教程-AGC 新建项目
前端·harmonyos