Huawei AppGallery Connect API - 403 客户端令牌授权失败

Posted

技术标签:

【中文标题】Huawei AppGallery Connect API - 403 客户端令牌授权失败【英文标题】:Huawei AppGallery Connect API - 403 client token authorization fail 【发布时间】:2021-01-07 23:39:41 【问题描述】:

我正在尝试使用链接中提到的 REST API 将应用程序发布过程自动化到华为商店。 https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agcapi-overview

我成功收到了访问令牌,但其他操作(例如:获取应用信息、获取上传 URL)失败并出现以下状态代码和错误。

403 client token authorization fail.

我没有写任何代码,我只是使用下面的示例代码并更新了clientId、clientSecret、appId。

https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Examples/agcapi-publish_api_code

会出什么问题?

【问题讨论】:

您能解决问题吗?我们有同样的问题,成功接收到令牌,但是我们得到 403 错误。 是的,看到这个评论。 ***.com/questions/63999681/… 一旦我将项目设置为 NA,它就开始工作了。 我在 Postman 上试过了,效果很好 【参考方案1】:

更新:

Project 设置为 N/A 以将 API 客户端定义为团队级客户端。 将角色设置为管理员
    请检查您的客户角色是否为管理员

成员的角色决定了 AppGallery Connect 中的权限。管理员拥有大部分操作权限,可以添加成员账户并为其分配权限。角色与权限的对应关系请参考Roles and Permissions。

    使用 AppGallery Connect API

调用AppGallery Connect API,您需要通过API客户端模式和OAuth客户端模式,提前获得AppGallery Connect服务器的授权。以API客户端方式调用AppGallery Connect API,您需要在AppGallery Connect中管理您的API客户端。 API 客户端只能由您的团队帐户持有人管理。基本流程如下:

A.创建 API 客户端

登录AppGallery Connect 并选择用户和权限。 从左侧导航树中转到Api Key > AppGalleryConnect API,然后点击创建。 将Name设置为自定义的客户端名称,将Roles设置为对应的角色,然后点击Confirm。 客户端创建成功后,在客户端信息列表中记录Client IDKey的值。

查看下面的截图:

B.获取访问API的Token

创建API客户端后,需要在AppGallery Connect中对API客户端进行认证。认证成功后,API客户端获取访问AppGallery Connect API的访问令牌。使用此访问令牌,您可以访问 AppGallery Connect API。

要获取访问令牌,您需要将调用Obtaining a Token API 的代码添加到您的应用程序中。

public static String getToken(String domain, String clientId, String clientSecret) 

    String token = null;

    try 

        HttpPost post = new HttpPost(domain + "/oauth2/v1/token");

        JSONObject keyString = new JSONObject();

        keyString.put("client_id", "18893***83957248");

        keyString.put("client_secret", "B15B497B44E080EBE2C4DE4E74930***52409516B2A1A5C8F0FCD2C579A8EB14");

        keyString.put("grant_type", "client_credentials");

        StringEntity entity = new StringEntity(keyString.toString(), Charset.forName("UTF-8"));

        entity.setContentEncoding("UTF-8");

        entity.setContentType("application/json");

        post.setEntity(entity);

        CloseableHttpClient httpClient = HttpClients.createDefault();

        HttpResponse response = httpClient.execute(post);

        int statusCode = response.getStatusLine().getStatusCode();

        if (statusCode == HttpStatus.SC_OK) 

            BufferedReader br =

                new BufferedReader(new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8));

            String result = br.readLine();

            JSONObject object = JSON.parseObject(result);

            token = object.getString("access_token");

        

        post.releaseConnection();

        httpClient.close();

     catch (Exception e) 

    

    return token;


获取访问令牌后,您可以在访问AppGallery Connect API时使用访问令牌进行身份认证。访问令牌的默认有效期为 48 小时。如果访问令牌过期,您需要获取新的访问令牌。

C.访问 API

获取访问令牌后,您可以使用访问令牌调用AppGallery Connect API完成功能开发。

【讨论】:

我已经完成了你提到的一切。帐户中只有一个用户。当我创建 API 客户端时,我确保该角色设置为管理员。正如我之前所说,我成功获得了令牌,尽管我在标头中附加了令牌,但只有后续调用失败。 @PonsuyambuVelladurai 请检查您是否将 Project 设置为 N/A 以将 API 客户端定义为团队级客户端。如果您还有其他问题,请随时与我联系。 :) @PonsuyambuVelladurai 好的,我更新了项目的答案,需要检查角色。 愚蠢的问题,但@shirley 我可以在哪里设置这个?非常感谢。编辑:愚蠢的我,在你创建 Api Key > AppGalleryConnect API 时一步一步【参考方案2】:

正如comment 中所说,一旦我将项目设置为 NA,它就开始工作了。

感谢@shirley

【讨论】:

以上是关于Huawei AppGallery Connect API - 403 客户端令牌授权失败的主要内容,如果未能解决你的问题,请参考以下文章

从应用研发到精细运营,AppGallery Connect 如何全周期赋能鸿蒙开发者

为啥我在AppGallery Connect中为其他应用更改货币时,我的应用中的应用内产品价格的货币会自动更改?

Deeplink实现华为应用外商品支付功能

被华为AppGallery的play Protect屏蔽

spark的udf和udaf的注册

发布版华为AppGallery 6003错误码