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

相关推荐
行者9624 分钟前
Flutter与OpenHarmony深度集成:数据导出组件的实战优化与性能提升
flutter·harmonyos·鸿蒙
小雨下雨的雨25 分钟前
Flutter 框架跨平台鸿蒙开发 —— Row & Column 布局之轴线控制艺术
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨1 小时前
Flutter 框架跨平台鸿蒙开发 —— Center 控件之完美居中之道
flutter·ui·华为·harmonyos·鸿蒙
小雨下雨的雨2 小时前
Flutter 框架跨平台鸿蒙开发 —— Icon 控件之图标交互美学
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨2 小时前
Flutter 框架跨平台鸿蒙开发 —— Placeholder 控件之布局雏形美学
flutter·ui·华为·harmonyos·鸿蒙系统
行者962 小时前
OpenHarmony Flutter弹出菜单组件深度实践:从基础到高级的完整指南
flutter·harmonyos·鸿蒙
小雨下雨的雨3 小时前
Flutter 框架跨平台鸿蒙开发 —— Padding 控件之空间呼吸艺术
flutter·ui·华为·harmonyos·鸿蒙系统
行者963 小时前
Flutter到OpenHarmony:横竖屏自适应布局深度实践
flutter·harmonyos·鸿蒙
小雨下雨的雨4 小时前
Flutter 框架跨平台鸿蒙开发 —— Align 控件之精准定位美学
flutter·ui·华为·harmonyos·鸿蒙
行者964 小时前
Flutter与OpenHarmony集成:跨平台开关组件的实践与优化
flutter·harmonyos·鸿蒙