HarmonyOS7更新亮点实录4:Account Kit 全局单点登录与星盾引擎底座安全验证

0 评论 1197 浏览 0 收藏 10 分钟

1、引言:摆脱反人类的验证码与跨端断层

想象一下目前大多数应用的登录体验:在新手机上下载应用、输入手机号、等短信验证码、输入验证码……如果过几天你买了个平板,同样痛苦的流程还得再走一遍。对于多端并发体验极差的今天,账号体系反而成了最大的拦路虎。

在 HarmonyOS 7.0 (26.0.0 Beta1) 中,Account Kit 迎来了系统级的深度整合。依托于底层的分布式系统架构和今年重点升级的“星盾引擎(Device Security Kit)”,Account Kit 不再仅仅是一个简单的账号密码管理库,而是进化成为了一个全局跨设备通行证。

简单来说,当你的应用接入了全新 Account Kit 后,用户在手机端完成一次强身份校验,其授权凭证可以跟随华为帐号系统无缝漂移到其名下的平板或车机上。今天我们将通过实战代码,演示如何接入这套无需输密码的静默鉴权体系。

配图1

2、安全架构:分布式单点登录是怎么做到的?

我们要理解,这种体验并非简单地将 token 从一台设备通过网络发给另一台设备,这在安全层面是完全不过关的。来看看 HarmonyOS 是如何在底层实现这套黑科技的。

配图2

得益于这套架构,开发者的后台不仅拿到了可靠的用户标识,而且所有的生物识别、防黑产撞库等极度复杂的安全风控策略,全都被下沉到了 星盾引擎 中完成。

3、实战演练:一行代码的静默鉴权闭环

我们在实际的工程项目中,往往通过两步走策略来接入这套高级机制:首先尝试静默登录(在同账号互联设备上会直接成功),如果失败,再降级拉起原生的授权面板。

3.1 环境与权限准备

在 module.json5 中,无需再申请乱七八糟的设备信息权限,直接声明相关的 Account 权限即可(通常针对跨设备互信还需要勾选分布式权限)。

3.2 编写全场景 Auth 管理类 (AuthManager.ts)

这里我们展示一段可以直接用于生产环境的封装类,逻辑清晰、异常处理完备:

// AuthManager.ts
import { authentication } from '@kit.AccountKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

export class AuthManager {

  /**
   * 发起全链路华为帐号授权
   * 优先尝试静默登录,体验最佳;若失败则降级为弹窗授权
   */
  public async loginWithHuaweiAccount(): Promise<string | null> {
    try {
      // 步骤 1:尝试静默登录 (Silent Login)
      // 如果用户在当前设备或者同局域网可信信任环设备上已授权过,将直接返回 Token
      let silentRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();
      // 配置我们要请求的权限:只需要获取唯一标识 OpenID
      silentRequest.forceLogin = false;

      hilog.info(0x0000, 'AuthManager', '开始发起静默授权校验...');
      let authResult = await authentication.executeRequest(silentRequest);

      if (authResult.data && authResult.data.accessToken) {
        hilog.info(0x0000, 'AuthManager', '静默授权成功,拿到通行证');
        return authResult.data.accessToken;
      }
    } catch (error) {
      let err = error as BusinessError;
      hilog.warn(0x0000, 'AuthManager', `静默授权失败,准备降级。原因码: ${err.code}`);

      // 步骤 2:降级处理,拉起系统原生授权半模态面板
      return await this.fallbackToManualAuth();
    }

    return null;
  }

  /**
   * 拉起系统原生授权 UI 面板
   */
  private async fallbackToManualAuth(): Promise<string | null> {
    try {
      let manualRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();
      // 强行要求拉起 UI
      manualRequest.forceLogin = true;

      hilog.info(0x0000, 'AuthManager', '拉起系统原生授权面板...');
      // 此处系统会接管 UI,要求用户进行人脸识别、指纹等星盾引擎的校验
      let manualResult = await authentication.executeRequest(manualRequest);

      if (manualResult.data && manualResult.data.accessToken) {
         hilog.info(0x0000, 'AuthManager', '手动授权成功!');
         return manualResult.data.accessToken;
      }
    } catch (error) {
      let err = error as BusinessError;
      hilog.error(0x0000, 'AuthManager', `用户取消授权或底层环境不安全。错误码: ${err.code}`);
    }
    return null;
  }
}

运行效果如下:

配图3

4、企业接入中的三把“安全锁”

在使用全新的 Account Kit 时,很多传统业务后台的同事可能会有疑问:这个 OpenID 和 AccessToken 的机制,是否容易被伪造?在 7.0 架构下,你需要注意这三个防护措施:

绝对不要在客户端做身份最终校验:

客户端拿到的 AccessToken 只是一把暂时的钥匙。你必须要求你的 App 带着这个 Token 发给你的服务器后端,由后端通过华为提供的 OAuth2.0 服务器端接口去换取该用户的真实身份和验签。所有在客户端依靠字符串匹配校验身份的代码都是极其危险的。

区分 UnionID 和 OpenID 的适用范围:

OpenID 仅对当前 App 唯一。如果你们公司旗下有三个应用(比如电商 App、外卖 App、打车 App),希望这三个应用账号体系互通,请在后台向华为申请 UnionID 权限。这样即使用户在不同 App 中授权,返回的 UnionID 也是恒定且唯一的,非常适合集团业务。

借助星盾引擎处理风控降级:

如果是支付、转账等敏感页面,即使通过了静默登录,你也必须再调取一次底层的高级别生物认证(如 FIDO 接口),因为静默登录只能证明“设备是这台设备”,并不能证明“现在握着设备的是本人”。只有结合星盾引擎底座的人脸/指纹校验,才能做到既顺畅又绝对安全。

5、总结语

通过 Account Kit 与底层星盾引擎的打通,HarmonyOS 7.0 为我们描绘了一个没有密码、没有验证码断层的互联世界。

当你把冗长的注册登录代码砍掉,替换成寥寥十几行静默授权 API 的时候,你就会发现:好的系统级 Kit 不是为应用套上一层枷锁,而是把最脏最累、最容易引发用户流失的安全合规验证,全部大包大揽过去。让应用开发回归纯粹的业务逻辑本身。

本文由 @轻口味 授权发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 目前还没评论,等你发挥!