HarmonyOS 7 新特性(二十)|Account Kit Skill 一键登录工程化封面

Account Kit 在 HarmonyOS 7 开放客户端与服务端 Skills,可辅助生成一键登录页面、工程配置以及授权码换取用户信息的服务端代码。生成结果仍需开发者审查与真机验证。

账号接入横跨 ArkTS 页面、权限、签名、Client ID、服务端接口、用户主键和隐私合规。传统复制示例的做法容易漏配置,也容易把令牌处理错误地放到客户端。Account Kit Skill 把标准步骤交给 AI 编码工具执行,但它不会替团队决定账户模型。

本文把一次“一键登录接入”拆成前置检查、客户端生成、服务端生成、差异审查、身份映射和端到端验证。

一、两个 Skill 负责两段工作

官方文档给出两个能力:hmos-account-kit-quicklogin-client 生成 ArkTS 一键登录页面、工程依赖、权限与跳转;hmos-account-kit-quicklogin-server 生成 Java 服务端工程,处理授权码换取用户信息。

客户端和服务端应该分别执行任务,分别审查。一次提示同时修改两端,会让权限、密钥与业务文件混在同一差异中。

二、接入前先冻结边界

在让 AI 修改代码前,明确:目标模块、允许修改的配置、登录成功路由、已有会话接口、服务端语言、禁止读取的密钥目录、必须执行的检查和回滚方式。

目标:entry 模块接入华为账号一键登录
允许:登录页面、路由适配、module.json5、oh-package 依赖
禁止:业务首页、支付模块、签名材料、生产密钥
验证:语法检查、构建、真机首次登录、取消与账号切换

没有边界的 AI 指令很容易生成一个“能演示、不能合并”的登录页。

三、确认 Skill 与 MCP 真正生效

官方建议先验证 AI 工具能够命中 Skill,并检查 DevEco MCP 连接。若输入“帮我接入登录”后工具直接自由编写代码,而没有执行 Skill 前置检查,就不应继续。

使用 "hmos-account-kit-quicklogin-client" Skill,
在 entry 模块接入华为账号一键登录。
复用现有 LoginViewModel,不修改首页和支付模块;
生成后列出修改文件、人工配置项和验证命令。

强制名称触发更容易审计,也能减少模型凭经验猜 API。

HarmonyOS 7 新特性(二十)|Account Kit Skill 一键登录工程化核心流程

四、客户端生成后的审查重点

检查依赖版本是否与工程 SDK 一致,权限是否最小,Client ID 是否使用配置项,登录按钮与页面生命周期是否正确,取消与失败是否恢复可操作状态。

type LoginState =
  | { kind: 'idle' }
  | { kind: 'authorizing'; requestId: string }
  | { kind: 'exchanging'; requestId: string }
  | { kind: 'signed-in'; userId: string }
  | { kind: 'cancelled' }
  | { kind: 'failed'; code: string; retryable: boolean }

class LoginCoordinator {
  private requestId = ''

  async start() {
    const id = crypto.randomUUID()
    this.requestId = id
    const authCode = await accountAdapter.authorize()
    if (id !== this.requestId) return
    const session = await backend.exchange(authCode)
    if (id !== this.requestId) return
    store.signedIn(session.userId)
  }
}

快速重复点击、页面退出和账号切换会产生迟到结果,requestId 用于保证只有当前链路能落地。

五、授权码只能交给服务端

客户端获取一次性授权结果后,交给受控业务服务端。服务端验证请求、交换用户信息、映射内部用户并签发自己的会话。Client Secret、服务端 Token 和生产配置不能进入客户端、提示词或代码仓库。

public SessionResult exchange(LoginCommand command) {
    IdempotentResult cached = resultStore.find(command.requestId());
    if (cached != null) return cached.session();

    HuaweiAccount account = accountClient.exchange(command.authorizationCode());
    InternalUser user = identityService.resolve(
        account.getOpenId(), account.getUnionId());
    SessionResult result = sessionService.issue(user.getId());
    resultStore.save(command.requestId(), result);
    return result;
}

这是服务端分层示例,不替代官方接口。授权码过期、重复交换、服务不可用和账号受限都要返回稳定错误码。

六、用户主键不能直接用手机号

手机号可能变化、为空或以匿名形式返回。团队应明确 OpenID、UnionID 与内部 userId 的映射边界。不同开发者、不同应用和跨端场景的标识范围不同,不能凭字段名猜测全局唯一性。

interface IdentityBinding {
  provider: 'huawei-account'
  appScopeOpenId: string
  unionId?: string
  internalUserId: string
  boundAt: number
}

账号合并、解绑和注销要走受控流程,避免同一个外部身份绑定两个内部用户。

七、会话存储与退出

客户端只保存业务会话所需的最小凭据,并使用安全存储。退出登录时清理本地会话、用户缓存和页面栈;服务端撤销或失效会话。系统账号切换事件到来后,应用重新验证绑定关系,不能继续展示前一个账户的数据。

八、错误语义要可恢复

至少区分:用户取消、网络超时、授权码过期、服务端拒绝、配置错误、账号受限和内部异常。用户取消不应显示红色错误;配置错误不可无限重试;网络超时允许保留当前页面并重试。

function mapLoginError(error: LoginError): LoginViewState {
  switch (error.kind) {
    case 'UserCancelled': return { message: '', retryable: true }
    case 'NetworkTimeout': return { message: '网络暂不可用', retryable: true }
    case 'InvalidClientConfig': return { message: '登录配置异常', retryable: false }
    default: return { message: '登录失败,请稍后重试', retryable: false }
  }
}

九、生成代码的安全检查

审查 Skill 新增的每个文件,确认没有硬编码密钥、扩大权限、引入未知依赖、绕过现有架构或记录敏感信息。生成的服务端示例要接入项目统一的鉴权、限流、日志脱敏和错误处理。

不要把“Skill 执行成功”当成“登录接入完成”。工具输出只能证明生成过程结束,不能证明真实账号链路可用。

十、端到端测试矩阵

describe('LoginCoordinator', () => {
  it('ignores stale authorization result', async () => {
    coordinator.start()
    coordinator.start()
    await accountAdapter.finishFirstRequest()
    expect(store.state.kind).not.toBe('signed-in')
  })

  it('does not create two users for duplicated request', async () => {
    const a = await backend.exchange(fixtureCommand)
    const b = await backend.exchange(fixtureCommand)
    expect(b.userId).toBe(a.userId)
  })
})

真机覆盖首次登录、取消、授权码过期、重复点击、账号切换、退出、弱网、服务端 5xx、应用后台和进程恢复。

十一、交付证据

保留 Skill 名称与版本、修改文件清单、依赖与权限差异、构建日志、服务端测试、真机录屏和回滚说明。密钥只记录配置项名称,不记录真实值。

十二、上线清单

  • 客户端与服务端 Skill 分别执行并审查;
  • 指令写清目标、允许范围和禁区;
  • Client Secret 与服务端 Token 从未进入客户端;
  • OpenID、UnionID 和内部 userId 映射明确;
  • 重复请求与迟到回调安全处理;
  • 退出和账号切换清理完整;
  • 错误码可解释、可恢复;
  • 构建、服务端测试和真机登录都有证据。

HarmonyOS 7 新特性(二十)|Account Kit Skill 一键登录工程化验收清单

结语

Account Kit Skill 的价值,是把高频接入步骤变成可重复的 AI 工程流程。真正的完成标准仍是修改范围可审查、秘密留在服务端、身份映射稳定、异常可恢复,并通过端到端真机验证。

官方参考

  • Account Kit Skill 能力开放:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-skill
  • 2026 年 6 月开发者月刊:https://developer.huawei.com/consumer/cn/monthly/202606
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐