封装一个 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 工具,开发者可以聚焦业务逻辑,而无需重复实现底层安全机制,同时确保符合鸿蒙的安全规范要求。

相关推荐
KevinChaos1 小时前
阳台小花园开发手记 01|HarmonyOS 7.0 互动卡片:小花园为何要两套界面
华为·harmonyos
Ranger09292 小时前
下一代鸿蒙打包工具链:arkdown
harmonyos
程序猿追4 小时前
一个工程面向手机与二合一:HarmonyOS 6 部署配置和本地手记
华为·智能手机·harmonyos
行者-全栈开发15 小时前
【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)
华为·harmonyos
行者-全栈开发1 天前
【鸿蒙心迹】国际化 i18n 与多语言资源管理实战(HarmonyOS 7.x)
ui·华为·重构·国际化·harmonyos·多语言
OH_TPC1 天前
HarmonyOS APP开发---"云客服"远程视频客服App,需要用到这个库
harmonyos
逆回2 天前
给鸿蒙手机做一只 3D 宠物:五个把我卡住的问题
harmonyos
钉先生贾2 天前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错2 天前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户117910488332 天前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos