访问许可证API时出现“未授权访问应用程序ID”
这是当前的代码:
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”确实是开启的。
如果我把'v2'换成'v2sandbox',似乎就会超时,然后报告后端错误。
有没有人能帮忙?
1 个回答
0
我找到了问题所在,GAE(谷歌应用引擎)的默认服务账号似乎不支持市场 API。如果我创建一个独立的服务账号,并使用 SignedJwtAssertionCredentials 来加载它,再使用唯一的许可范围,就可以正常工作。所以,GAE 的默认服务账号是不被市场 API 支持的。
对于已经安装的谷歌应用,它已经允许应用以域内任何用户的身份访问指定的范围。不过,我们需要在 SignedJwtAssertionCredentials 的初始化参数中添加一个 "sub=" 参数,告诉库我们想要以哪个域用户的身份进行操作。因此,只要我们知道一个域的管理员用户,就可以直接以该用户的身份访问目录 API,而不需要弹出任何认证界面给最终用户。而这同样不被默认的 GAE 服务账号支持。