在开发服务器上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.jarcom.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库来检索默认应用程序凭证 。

  1. 环境variablesGOOGLE_APPLICATION_CREDENTIALS被选中。 如果指定了这个variables,它应该指向一个定义证书的文件。 为此目的获取凭证的最简单方法是使用Google Developers Console在APIs&Auth部分Credentials子部分中创build一个服务帐户。 创build一个服务帐户或select一个现有的帐户,并select生成新的JSON密钥 。 将环境variables设置为下载的JSON文件的path。
  2. 如果您在您的机器上安装了Google Cloud SDK并运行gcloud auth login命令,则您的身份可用作代理来testing来自该机器的代码调用API。
  3. 如果您在Google App Engine生产环境中运行,则将使用与应用程序关联的内置服务帐户。
  4. 如果您正在Google Compute Engine生产环境中运行,则将使用与虚拟机实例关联的内置服务帐户。
  5. 如果这些条件都不成立,则会发生错误。

它看起来像选项#2可能是最简单的(运行gcloud auth login使您的代码使用您的谷歌帐户进行身份validation时,本地运行),但你也可以做#1。

我一直在使用GAE的PHP开发服务器,并且与AppIdentity服务工作不正常相同。 在PHP中,您可以通过将$_SERVER['APPLICATION_ID']设置$_SERVER['APPLICATION_ID']来解决这个问题。 我相信在Java中必须有相同的方法,您只需要将开发预先设置为应用程序标识的开始,以便与开发环境一起工作。