"未授权访问应用程序ID"尝试访问许可证API时

时间:2014-08-14 15:15:12

标签: python google-app-engine google-oauth google-apps-marketplace

此处的当前代码:

SCOPES = [
  'https://www.googleapis.com/auth/appsmarketplace.license'
]

def getAppService():
  CREDENTIALS_ = appengine.AppAssertionCredentials(scope=SCOPES)
  http = httplib2.Http(memcache)
  http = CREDENTIALS_.authorize(http)
  service = discovery.build(serviceName = 'appsmarket', version='v2', http=http)
  return service

def getLicenseNotifications():
  service = getAppService()
  ret = service.licenseNotification().list(applicationId='THE_PROJECT_ID_NUMBER', timestamp=0, max_results=10).execute()
  logging.debug(ret)
  return ret

但它获得了403"未授权访问应用程序ID"。此代码作为默认的内置服务帐户从GAE项目调用,在同一项目下,与市场应用程序的manifest.json api_console_project_id字段完全相同的项目ID。

我确实搜索了错误消息,但得到了不相关的信息。

" Google Apps Marketplace API"在开发者控制台中肯定是ON。

如果我更换' v2'到' v2sandbox',似乎超时然后报告后端错误。

任何帮助?

1 个答案:

答案 0 :(得分:0)

我发现了问题,即GAE默认服务帐户,我认为市场api不支持。如果我创建一个独立的服务帐户并使用SignedJwtAssertionCredentials加载它,并使用唯一的许可证范围,它可以工作。所以merketplace api不支持GAE默认服务帐户。

对于谷歌应用安装应用,它已经授予应用以域的任何用户访问指定的范围。但是我们需要添加一个" sub =" SignedJwtAssertionCredentials init param中的param告诉库我们想要充当哪个域用户。所以,通过这个,只要我们知道一个域的管理员用户,那么我们就可以充当用户访问目录api而无需弹出任何auth屏幕给最终用户。默认GAE服务帐户也不支持此功能。