HarmonyOS鸿蒙Next中多个APP使用华为认证服务

HarmonyOS鸿蒙Next中多个APP使用华为认证服务 需求如下:开发两个鸿蒙app,一个给C端客户使用,一个给公司员工使用,两app归于agc里的同一个项目下,共用华为认证服务,使用同一套客户系统。

注意到开通华为账号一键登录服务时,需要输入clientId和clientSecret,两个鸿蒙app分别在项目中有不同的auth2.0的clientId和clientSecret,如果填写了一个,则另外一个无法使用华为账号一键登录服务,好像也没搜索到解决方案。

是否这两个app发布时,采用同一个证书发布?然后在开通华为一键登录时,两个app共用一个clientid和clientsecret?并且在工程中“entry”模块的“module.json5”文件中,将clientid设置成一样?

或者还有什么更好的解决方案,请大神赐教,不胜感激。


更多关于HarmonyOS鸿蒙Next中多个APP使用华为认证服务的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

两个 App 不要共用同一个 ClientID/Secret,也不需要共用证书;在同一个 AGC 项目里,各自用自己的 ClientID/Secret,都加到华为账号一键登录的配置里,就能共用同一套用户系统(靠 UnionID 互通)。


一、正确做法(推荐)

  1. AGC 侧:同一项目、两个应用

    • 项目下创建两个 HarmonyOS 应用:App-C(C 端)、App-E(员工)。
    • 每个应用自动生成独立的 ClientID、ClientSecret、BundleName
  2. 开通华为账号一键登录(关键)

    • 进入「认证服务 → 华为账号 → 一键登录」。
    • 添加两条客户端配置:分别填入 App-C 和 App-E 的 ClientID 与 ClientSecret。
    • 权限申请:两个应用都要在「API 服务 → 授权管理」申请 “华为账号一键登录” 权限。
  3. 证书与指纹:可同可不同

    • 两个应用可以用同一套发布证书(也可以不同)。
    • 每个应用在 AGC「项目设置 → 常规 → 应用」里,配置自己的签名证书指纹(调试 / 发布各填)。
  4. 端侧配置:各自用自己的 ClientID 每个 App 的 module.json5 里写自己的 ClientID:

    {
      "module": {
        "metadata": [
          {
            "name": "client_id",
            "value": "App-C或App-E自己的ClientID"
          }
        ]
      }
    }
    
  5. 用户体系互通:靠 UnionID

    • 同一开发者账号下的应用,同一华为账号的UnionID 完全相同,OpenID 不同。
    • 后端用UnionID作为唯一键,绑定到你的用户表,两个 App 就能登录同一账号。

二、你原来的想法有问题

  • ❌ 不能两个 App 共用同一个 ClientID/Secret:AGC 是按应用(BundleName)+ClientID 鉴权,混用会报 invalid authCode(203818037)。
  • ❌ 不需要为了登录而强制共用证书:证书只影响签名与指纹校验,不影响 ClientID 和 UnionID 互通。

三、最简验证步骤

  1. AGC 项目→创建两个应用,记好各自 ClientID/Secret。
  2. 认证服务→华为账号一键登录→添加两个客户端
  3. 两个 App 各自配置自己的 client_id 和签名指纹。
  4. 后端用 UnionID 做用户唯一标识,完成绑定 / 登录。

四、官方文档

更多关于HarmonyOS鸿蒙Next中多个APP使用华为认证服务的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可能我的问题描述有点不准确,我实际上想说的不是“一键登录”,我想说的是“云开发”里的认证服务

cke_1429.png

如果启用“华为账号”,则需要填写clientId,和clientSecret,如下图所示:

cke_5767.png

这里只能填写某一个应用的clientId,和clientSecret,不知道该填写哪个的,比如填写了给员工用的,则给客户用的那个好像就不行了。

兄弟你的问题解决没怎么解决的, 你采纳的那个好像跟你问的问题不是一个意思, 我跟你一样的情况不知道怎么解决,提工单也是回复华为一键登录无语

其实没有解决,我现在采取的是变通的方式来做,就是所有的第三方登录,包括华为、微信、支付宝等,自己维护一个第三方账户的unionId表,第三方登录时,先去向第三方获取unionId,拿到unionId后,回来跟自己维护的unionId表比对,如果能匹配,就返回一个jwt给前端,前端用jwt发起华为认证的自有账号登录。

如果只是客户和员工可以共用一个app,就不会有认证的问题了,而且维护还简单了。不过在项目功能逻辑上要做些修改。

你的app用户有两种:C端客户用户和员工用户。

  1. 对于员工,这部分是可以提前确认的,在服务端库里标记上。这部分员工用户在登录的时候就可以给他选择是登录普通客户功能还是员工功能。

  2. 对于普通客户用户,没有员工标记,直接进入客户功能就行。

我在银行做的项目就是用的这种解决办法。

目前我的员工和客户都是同一个数据库,和华为认证功能里的客户列表保持一致,员工额外添加员工信息表。但是客户和员工的功能有很大差异,所以分成了两个app。

背景知识:

首先楼主两个app都需要上架华为应用市场,那么就需要两个不同的包名,需要两个不同的包名那就需要创建两个不同包名的应用,创建应用了就会存在两套clientid和clientsecret 分别作用这两个app。所以如上选择上架华为应用应用市场两个app一套clientid和clientsecret是行不通的。如果楼主只上架一个app还是且链各个app不再同一手机上安装的化,可以让另一个app使用企业自主分发。

注意:这里的企业分发的app与发布的华为市场的app是同包名。

两个应用不可以共享使用一个Client ID,需要为每个应用单独配置Client ID,应该在module json 为两个应用单独配置Client ID

1、不同应用配置不同的clientid和clientsecret, 你应用AGC后管创建完成后会生成不同的配置;

项目里配置各自的clientid和clientsecret;

配置Client ID 表明是应用那一栏;

2、发布证书可以是同一个, 因为你的两个应用在同一个项目下;

如果填写了一个,则另外一个无法使用华为账号一键登录服务,好像也没搜索到解决方案。

有什么报错么?

我之前描述有误,不是华为账号一键登录,是华为agc认证服务里的华为账号登录功能,之前是准备为两个app都配置华为账号认证服务的,搜了很久也没有解决方案,报的是token错误,现在决定采用华为账号一键登录,然后通过uionId去关联的解决方案了。

在HarmonyOS NEXT中,多个APP共用华为认证服务需通过华为账号统一登录实现。每个APP集成HMS Core的Account Kit,采用OAuth 2.0授权码模式,并注册相同应用的Client ID。通过授权服务获取Token,即可跨应用共享登录态,无需重复输入密码。

两个鸿蒙App虽在AGC同一项目中,但应各自创建独立的OAuth 2.0客户端ID(绑定各自包名与签名),而非共用一个。开通华为账号一键登录服务时,无需填写统一凭据;每个App在“项目设置-API管理”中分别启用Account Kit,并在“OAuth 2.0 客户端”中为每个应用创建专属ClientID。集成时,各App的module.json5中填写自己的client_id

关键在于用户身份互通:同一华为开发者账号下的应用,使用华为账号登录时,基于相同的unionID机制,同一手机号的华为账号在两个App中返回的unionID一致。后端通过unionID即可识别同一用户,满足共用客户系统的需求。因此不需要共用证书或ClientID,按标准方案独立配置即可。

回到顶部