You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AppsScript调用Google Marketplace API获许可数据遇403权限问题求助

解决Google Marketplace API调用403 "Not authorized to access the application ID"错误

针对你遇到的调用Google Marketplace API获取许可数据时返回403错误的问题,可按以下步骤排查解决:

1. 确认应用ID完全匹配

确保API请求中使用的applicationId是Google Marketplace控制台中你的应用对应的数字ID(即你上线应用URL中的977246938879),而非GCP项目ID或其他标识。代码中硬编码或传入的ID必须与Marketplace后台的应用ID完全一致。

2. 校验权限范围与授权方式

  • 权限范围:确认已添加正确的API权限范围,获取许可数据需使用https://www.googleapis.com/auth/appsmarketplace.license或https://www.googleapis.com/auth/appsmarketplace.license.readonly,不要添加无关范围。
  • 域级授权:由于是同域表格的AppsScript,需通过Google Workspace Admin控制台配置域级委派,允许你的应用访问域内许可数据,而非仅依赖个人OAuth授权(普通用户无此权限)。同时在GCP IAM中,确保运行脚本的账号(或服务账号)被授予查看Marketplace许可的权限。

3. 验证调用身份的权限

  • 运行脚本的账号必须是Google Workspace域管理员,或被明确授予了查看Marketplace应用许可数据的权限,普通域用户调用会触发403错误。
  • 若使用服务账号调用,需在GCP创建服务账号并下载密钥,通过OAuth2库实现服务账号授权,同时在Workspace Admin控制台为该服务账号配置域级委派,指定所需的权限范围。

4. 检查Marketplace SDK配置

  • 确认GCP中启用Marketplace API和SDK的项目,与你发布Marketplace应用时关联的项目是同一个。
  • 进入Marketplace SDK配置页面,检查API访问设置,确保允许当前项目的API请求访问应用的许可数据。

5. 调试API请求细节

  • 打印API请求的完整URL和请求头,确认applicationId在请求路径中正确(例如GET https://www.googleapis.com/appsmarket/v2/customer/{你的域}/license/{应用ID})。
  • 使用GCP的API Explorer测试调用:以域管理员身份授权,直接发起请求,若能成功返回数据,说明问题出在AppsScript的授权逻辑或代码中;若仍失败,则需重新检查应用配置或权限设置。

示例代码(服务账号授权方式)

function getUsers() {
  const APP_ID = '977246938879';
  const DOMAIN = '你的域名.com';
  const oauthService = getMarketplaceOAuthService();

  if (!oauthService.hasAccess()) {
    throw new Error('授权失败: ' + oauthService.getLastError());
  }

  const apiUrl = `https://www.googleapis.com/appsmarket/v2/customer/${DOMAIN}/license/${APP_ID}/users`;
  const options = {
    headers: { Authorization: `Bearer ${oauthService.getAccessToken()}` }
  };

  const response = UrlFetchApp.fetch(apiUrl, options);
  return JSON.parse(response.getContentText());
}

function getMarketplaceOAuthService() {
  const SERVICE_ACCOUNT_KEY = {
    "type": "service_account",
    "project_id": "你的GCP项目ID",
    "private_key_id": "你的私钥ID",
    "private_key": "-----BEGIN PRIVATE KEY-----\n你的私钥内容\n-----END PRIVATE KEY-----\n",
    "client_email": "你的服务账号邮箱",
    "client_id": "你的服务账号客户端ID",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "你的服务账号证书URL"
  };

  return OAuth2.createService('MarketplaceLicense')
    .setTokenUrl(SERVICE_ACCOUNT_KEY.token_uri)
    .setPrivateKey(SERVICE_ACCOUNT_KEY.private_key)
    .setIssuer(SERVICE_ACCOUNT_KEY.client_email)
    .setSubject('admin@你的域名.com') // 域管理员邮箱
    .setPropertyStore(PropertiesService.getScriptProperties())
    .setScope('https://www.googleapis.com/auth/appsmarketplace.license.readonly');
}

注意:使用此代码前需在AppsScript中安装OAuth2库(库ID:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF)。

内容的提问来源于stack exchange,提问作者Andy Evans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:35:26