文档管理中心
指南Connect API使用入门

使用入门

要发起一个基本的AppGallery Connect API调用,您需要先获得AppGallery Connect服务端的授权。目前您可以通过以下方式获得授权:

  • (推荐)Service Account方式
    使用Service Account(服务账号),您可以实现服务器与服务器之间接口的鉴权,相比API客户端方式更安全。
    说明

    Service Account即将替代API客户端,新创建凭据请您选择Service Account,并请尽快将您使用的API客户端切换到Service Account。

  • API客户端方式

    使用API客户端,您可以以应用的身份进行API操作,API访问权限由API客户端的角色来确定。此方式适合开发者自己的IT系统对接AppGallery Connect时使用。

  • OAuth客户端方式
    使用OAuth客户端,您的应用可以向用户提供应用的各种管理服务,您的用户可以是华为的开发者。用户可以使用华为账号登录您的应用,并以该用户自己的身份进行API操作,用户的API访问权限由其在团队内的角色来确定。此方式适合第三方IDE、工具对接AppGallery Connect时使用。
    说明

    OAuth客户端方式仅面向平台类的开发者开放,普通应用开发者暂无法使用。

(推荐)Service Account方式

要发起一个基本的Service Account方式的API调用,您需要在AppGallery Connect中管理您的Service Account。

基本流程如下:

  1. 创建Service Account
  2. 获取鉴权令牌
  3. 访问API

创建Service Account

Service Account是AppGallery Connect用于管理用户访问AppGallery Connect API的身份凭据,您可以给不同角色创建不同的Service Account,使不同角色可以访问对应权限的AppGallery Connect API。在访问某个API前,必须创建有权访问该API的Service Account。

  1. 登录AppGallery Connect,选择“用户与访问”。
  2. 左侧导航栏选择“API密钥 > Connect API”,选择“Service Account”页签,点击“创建”。

  3. 在“创建Service Account”窗口,配置Service Account信息。

    展开

    参数

    说明

    名称

    输入自定义的Service Account名称。

    类型

    选择创建的Service Account类型。

    Connect API要求使用开发者级凭据,请选择“开发者级”。最多可以创建100个“开发者级”的Service Account。

    角色

    选择的角色决定了该Service Account具有的权限,具体角色对应的权限请参考角色与权限

  4. Service Account创建成功后,将自动下载对应的“******private.json”格式的凭据文件,信息如下。请妥善保存。
    收起
    自动换行
    深色代码主题
    复制
    1. {
    2. "project_id": "",
    3. "key_id": "79******b9",
    4. "private_key": "-----BEGIN PRIVATE KEY-----\n******\n-----END PRIVATE KEY-----\n",
    5. "sub_account": "10*****19",
    6. "auth_uri": "https://******",
    7. "token_uri": "https://oauth-login.cloud.huawei.com/oauth2/v3/token",
    8. "auth_provider_cert_uri": "https://******",
    9. "client_cert_uri": "https://******"
    10. }
  5. (可选)点击Service Account“操作”列的“添加”,AGC将为您新生成一个密钥,并自动下载包含新密钥的凭据文件。最多可为一个Service Account添加10个密钥。

    如需删除添加的密钥,在“密钥ID”列点击对应密钥的删除按钮即可。如密钥总数超过3个,可点击“更多”打开“管理密钥ID”窗口进行删除。

    注意

    删除密钥,会导致密钥关联的API权限和资源都被删除,无法继续正常使用,请谨慎操作。

  6. (可选)Service Account创建成功即自动启用。您也可以通过点击“操作”列的“停用”,来停用该Service Account。
    注意

    停用Service Account会阻止账号向API进行身份验证,且可能会使资源无法正常使用该账号,请谨慎操作。

    如需重新启用Service Account,点击“操作”列的“启用”。

获取鉴权令牌

创建Service Account后,您可以使用凭据文件中返回的key_id和private_key来获取鉴权令牌,从而访问AppGallery Connect API。

Service Account鉴权令牌为JWT(JSON Web Token)格式字符串,JWT数据格式包括Header(头部)、Payload(负载)和Signature(签名),示例:eyJraWQiOiIx******.eyJhdWQiOiJodHR******.QRodgXa2xeXSt4Gp******

  1. 生成JWT Header数据。

    根据文件中的key_id字段拼接JSON体,对JSON体进行BASE64编码,生成Header数据,示例:eyJraWQiOiIx******。

    收起
    自动换行
    深色代码主题
    复制
    1. {
    2. "kid": "79******b9",
    3. "typ": "JWT",
    4. "alg": "PS256"
    5. }
    展开

    参数

    说明

    kid

    填写JSON凭据文件中的key_id字段的值。

    typ

    数据类型,固定为:JWT。

    alg

    算法类型,固定为:PS256。

  2. 生成JWT Payload数据。

    根据文件中的sub_account字段拼接JSON体,对JSON体进行BASE64编码,生成Payload数据,示例:eyJhdWQiOiJodHR******。

    收起
    自动换行
    深色代码主题
    复制
    1. {
    2. "aud": "https://oauth-login.cloud.huawei.com/oauth2/v3/token",
    3. "iss": "10*****19",
    4. "exp": 1581410664,
    5. "iat": 1581407064
    6. }
    展开

    参数

    说明

    aud

    固定为:https://oauth-login.cloud.huawei.com/oauth2/v3/token。

    iss

    JSON凭据文件中sub_account字段的值,标识数据生成者。

    exp

    JWT到期时间,UTC时间戳,比iat晚3600秒。

    iat

    JWT签发时间,UTC时间戳,为自UTC时间1970年1月1日00:00:00的秒数(您的服务器时间需要校准为标准时间)。

  3. 生成JWT Signature数据。

    将完成BASE64编码后的Header字符串与Payload字符串,通过“.”进行连接,并在业务应用中,通过密钥JSON文件中的private_key(华为不进行存储,请您妥善保管),使用SHA256withRSA/PSS算法对拼接的字符串签名,生成Signature数据,示例:QRodgXa2xeXSt4Gp******。

您可以在应用程序中参考如下代码来获取鉴权令牌,完整Demo请参见服务端示例代码

收起
自动换行
深色代码主题
复制
  1. public class JWTGenerateDemo {
  2. // please replace it with the private_key in your json file
  3. // this is the plain text in this demo, please encrypt the private key in your code, only get the string between
  4. // '-----BEGIN PRIVATE KEY-----\n' and '\n-----END PRIVATE KEY-----\n'
  5. private static final String PRIVATE_KEY = "******";
  6. // please replace it with the sub_account in your json file
  7. private static final String ISS = "10*****19";
  8. // please replace it with the key_id in your json file
  9. private static final String KID = "79******b9";
  10. private static final String AUD = "https://oauth-login.cloud.huawei.com/oauth2/v3/token";
  11. private static final String ALG_PS256 = "PS256";
  12. private static final String DOT = ".";
  13. private static PrivateKey getPrivateKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {
  14. PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodeBase64(key));
  15. KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  16. return keyFactory.generatePrivate(keySpec);
  17. }
  18. private static byte[] decodeBase64(String Base64Str) {
  19. return Base64.decodeBase64(Base64Str.getBytes(StandardCharsets.UTF_8));
  20. }
  21. private String createJwt()
  22. throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
  23. long iat = System.currentTimeMillis() / 1000;
  24. long exp = iat + 3600;
  25. // jwt header
  26. JSONObject header = new JSONObject();
  27. header.put("alg", ALG_PS256);
  28. header.put("kid", KID);
  29. header.put("typ", "JWT");
  30. // jwt payload
  31. JSONObject payload = new JSONObject();
  32. payload.put("aud", AUD);
  33. payload.put("iss", ISS);
  34. payload.put("exp", exp);
  35. payload.put("iat", iat);
  36. // jwt signature
  37. byte[] encodeHeaderBytes = Base64.encodeBase64URLSafe(header.toString().getBytes(StandardCharsets.UTF_8));
  38. byte[] encodePayloadBytes = Base64.encodeBase64URLSafe(payload.toString().getBytes(StandardCharsets.UTF_8));
  39. String encodeHeader = new String(encodeHeaderBytes, StandardCharsets.UTF_8);
  40. String encodePayload = new String(encodePayloadBytes, StandardCharsets.UTF_8);
  41. String jwtHeaderAndPayload = encodeHeader + DOT + encodePayload;
  42. Signature signatureInstance = Signature.getInstance("SHA256withRSA/PSS", new BouncyCastleProvider());
  43. signatureInstance.initSign(getPrivateKey(PRIVATE_KEY));
  44. signatureInstance.update(jwtHeaderAndPayload.getBytes(StandardCharsets.UTF_8));
  45. String signature =
  46. new String(Objects.requireNonNull(Base64.encodeBase64URLSafe(signatureInstance.sign())), StandardCharsets.UTF_8);
  47. return jwtHeaderAndPayload + DOT + signature;
  48. }
  49. public static void main(String args[])
  50. throws InvalidKeySpecException, NoSuchAlgorithmException, SignatureException, InvalidKeyException {
  51. JWTGenerateDemo JWTGenerateDemo = new JWTGenerateDemo();
  52. System.out.println(JWTGenerateDemo.createJwt());
  53. }
  54. }

访问API

在调用API时,把已获取的鉴权令牌置于Authorization头部以完成鉴权。

收起
自动换行
深色代码主题
复制
  1. GET /v1/demo/indexes HTTP/1.1
  2. Authorization: Bearer eyJraWQiOiIx******.eyJhdWQiOiJodHR******.QRodgXa2xeXSt4Gp******
  3. Host: connect-api.cloud.huawei.com

API客户端方式

要发起一个基本的API客户端方式的API调用,您需要在AppGallery Connect中管理您的API客户端,API只能由您的团队账号所有者管理。

基本流程如下:

  1. 创建API客户端
  2. 获取访问API的Token
  3. 访问API
说明

为了帮助您更好地开发,我们提供了示例代码。您可以参考Demo工程中的示例代码编写您的应用程序。

创建API客户端

API客户端是AppGallery Connect用于管理用户访问AppGallery Connect API的身份凭据,您可以给不同角色创建不同的API客户端,使不同角色可以访问对应权限的AppGallery Connect API。在访问某个API前,必须创建有权访问该API的API客户端。

  1. 登录AppGallery Connect,选择“用户与访问”。
  2. 左侧导航栏选择“API密钥 > Connect API”,选择“API客户端”页签,点击“创建”。

  3. 在“创建API客户端”窗口,配置API客户端信息。

    展开

    参数

    说明

    名称

    输入自定义的API客户端名称。

    项目

    保持默认值“N/A”,表示创建团队级的API客户端。

    注意

    如果不为N/A,将会导致调用API时返回403错误。

    角色

    选择的角色决定了该API客户端具有的权限,具体角色对应的权限请参考角色与权限

  4. 客户端创建成功后,客户端信息列表中会记录“ID”和“密钥”的值。后续您需要使用ID和密钥获取访问API的Token。

获取访问API的Token

创建完API客户端后需要到华为AppGallery Connect平台进行鉴权,鉴权通过后将获得用于访问AppGallery Connect API的Access Token。用户凭借该Access Token即可访问AppGallery Connect API。您可以调用获取Token接口来获取Access Token。

Java代码示例如下:

收起
自动换行
深色代码主题
复制
  1. public static String getToken(String domain, String clientId, String clientSecret) {
  2. String token = null;
  3. try {
  4. HttpPost post = new HttpPost(domain + "/oauth2/v1/token");
  5. JSONObject keyString = new JSONObject();
  6. keyString.put("client_id", "18893***83957248");
  7. keyString.put("client_secret", "B15B497B44E080EBE2C4DE4E74930***52409516B2A1A5C8F0FCD2C579A8EB14");
  8. keyString.put("grant_type", "client_credentials");
  9. StringEntity entity = new StringEntity(keyString.toString(), Charset.forName("UTF-8"));
  10. entity.setContentEncoding("UTF-8");
  11. entity.setContentType("application/json");
  12. post.setEntity(entity);
  13. CloseableHttpClient httpClient = HttpClients.createDefault();
  14. HttpResponse response = httpClient.execute(post);
  15. int statusCode = response.getStatusLine().getStatusCode();
  16. if (statusCode == HttpStatus.SC_OK) {
  17. BufferedReader br =
  18. new BufferedReader(new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8));
  19. String result = br.readLine();
  20. JSONObject object = JSON.parseObject(result);
  21. token = object.getString("access_token");
  22. }
  23. post.releaseConnection();
  24. httpClient.close();
  25. } catch (Exception e) {
  26. }
  27. return token;
  28. }

获取Access Token后,您在访问AppGallery Connect API接口时可携带该Access Token进行身份验证。该Access Token的有效期由返回参数expires_in指定,如果Access Token失效,则需要重新调用获取Token接口获取。

访问API

获取鉴权通过后的Access Token后,您即可以调用对应的AppGallery Connect API来完成相应的功能开发,具体如何调用请参考对应的API文档。

OAuth客户端方式

注意

OAuth客户端方式仅面向平台类的开发者开放,普通应用开发者暂无法使用。

要发起一个基本的OAuth客户端方式的API调用,您需要向华为获取用于访问API的用户授权凭证,API访问权限由开发者在团队内的角色来确定。

基本流程具体如下:

  1. 申请使用Scope
  2. 对接华为账号服务
  3. 获取用户授权码
  4. 访问API

申请使用Scope

如果您希望使用OAuth客户端方式访问AppGallery Connect API,请填写申请表格,并发邮件至agconnect@huawei.com申请。申请时可以通过Scope指定需要访问的API。

申请模板:

AppGallery Connect开放的Scope清单如下:

展开

API类别

Scope Url

Publishing API(Android)

https://www.huawei.com/auth/agc/publish

Upload Management API

https://www.huawei.com/auth/agc/publish

Testing API

https://www.huawei.com/auth/agc/publish

Provisioning API

https://www.huawei.com/auth/agc/develop

Reports API

https://www.huawei.com/auth/agc/report/read

Project Management API

https://www.huawei.com/auth/agc/project

PMS API

https://www.huawei.com/auth/agc/product

https://www.huawei.com/auth/agc/product/read

说明

以上均为敏感Scope,使用这些Scope需要事先经过AppGallery Connect运营人员的审核。

对接华为账号服务

AppGallery Connect API的OAuth认证机制由华为账号服务提供,在发起OAuth客户端方式的API调用前,您需要完成华为账号服务的接入开发。

获取用户授权码

华为账号服务对接开发完成后,您可以获取登录授权成功后的Access Token,用于OAuth客户端方式的API访问。

访问API

获取鉴权通过后的Access Token后,您即可以调用对应的AppGallery Connect API来完成相应的功能开发,详细API的调用方法请参见对应的API文档。

注意

您的用户在访问相关API时,需要具有该API对应的权限,如果因为权限不足导致失败,您需要提示用户向其团队所有者申请赋予拥有该权限的角色。

在 指南 中进行搜索
请输入您想要搜索的关键词