在开发服务器上configurationAppIdentityService的使用
我有一个应用程序,目前使用com.google.appendinge.api.appidentity.AppIdentityService
来促进authentication和授权使用相同的应用程序[即。 相同的帐户]电子表格数据通过SpreadsheetService
API。 适用于部署到GAE环境的生产模式。 但是由于显而易见的原因,它在我的开发外部引擎环境中运行并不起作用(authentication错误,并不奇怪)。
我的问题是:是否有可能和“支持”configuration一个本地开发服务器使用必要的密钥和证书信息,使AppIdentityService按预期工作?
我阅读了https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-app这篇文章,我理解这是可能的,但是我错误地理解了关键点并希望得到任何反馈亲和这个。
在一个完美的世界里,我希望我的testing环境尽可能地模仿生产模式。 我也正在考虑在我的testing环境中使用'正常'oauth2 web应用程序authentication,但是如果可能的话,宁愿坚持使用AppIdentityService。
我怀疑appengine-api-stubs.jar
的com.google.appengine.api.appidentity.dev.LocalAppIdentityService
类是预期的技术,但是还有其他人使用它来在开发服务器中提供AppIdentityService
身份validation吗? 我最初的假设是将com.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider
中的com.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider类replace为使用我自己的工厂类,使用上面的LocalAppIdentityService类。 还是我吠叫错了树?
使用GAE SDK 1.8.8 for Java。
在本地开发服务器下运行时,GAE Java App Identity API调用GoogleCredentials库来检索默认应用程序凭证 。
- 环境variables
GOOGLE_APPLICATION_CREDENTIALS
被选中。 如果指定了这个variables,它应该指向一个定义证书的文件。 为此目的获取凭证的最简单方法是使用Google Developers Console在APIs&Auth部分Credentials子部分中创build一个服务帐户。 创build一个服务帐户或select一个现有的帐户,并select生成新的JSON密钥 。 将环境variables设置为下载的JSON文件的path。- 如果您在您的机器上安装了Google Cloud SDK并运行
gcloud auth login
命令,则您的身份可用作代理来testing来自该机器的代码调用API。- 如果您在Google App Engine生产环境中运行,则将使用与应用程序关联的内置服务帐户。
- 如果您正在Google Compute Engine生产环境中运行,则将使用与虚拟机实例关联的内置服务帐户。
- 如果这些条件都不成立,则会发生错误。
它看起来像选项#2可能是最简单的(运行gcloud auth login
使您的代码使用您的谷歌帐户进行身份validation时,本地运行),但你也可以做#1。
我一直在使用GAE的PHP开发服务器,并且与AppIdentity服务工作不正常相同。 在PHP中,您可以通过将$_SERVER['APPLICATION_ID']
设置$_SERVER['APPLICATION_ID']
来解决这个问题。 我相信在Java中必须有相同的方法,您只需要将开发预先设置为应用程序标识的开始,以便与开发环境一起工作。