在开发服务器上配置 AppIdentityService 的使用

2022-09-01 04:01:39

我有一个应用程序,目前使用它来促进通过API使用同一应用程序的[即同一帐户]电子表格数据的身份验证和授权。在部署到 GAE 环境的生产模式下效果很好。但是由于显而易见的原因,它在我的开发应用程序引擎环境中运行不起作用(身份验证错误,这并不奇怪)。com.google.appendinge.api.appidentity.AppIdentityServiceSpreadsheetService

我的问题是:是否有可能和“支持”配置一个人的本地开发服务器,以使用必要的密钥和证书信息,以使AppIdentityService能够按预期工作?

https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-app 阅读了这篇文章,我理解它表明这是可能的,但我误解了关键点,并希望得到任何关于此的反馈。

在一个完美的世界里,我希望我的测试环境尽可能地模仿生产模式。我也正在考虑在我的测试环境中使用“正常”oauth2 Web应用程序身份验证,但如果可能的话,我更愿意坚持使用AppIdentityService。

我怀疑 中的类是预期的技术,但是否有其他人也使用它在开发服务器中提供身份验证?我最初的假设是,替换在com.google.appengine.spi.FactoryProvider中找到的类,以使用我自己的工厂类,使用上面的LocalAppIdentityService类。还是我吠错了树?com.google.appengine.api.appidentity.dev.LocalAppIdentityServiceappengine-api-stubs.jarAppIdentityServicecom.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider

使用 GAE SDK 1.8.8 for Java。


答案 1

在本地开发服务器下运行时,GAE Java App Identity API 会调用 GoogleCredentials 库来检索默认应用程序凭据

  1. 检查环境变量。如果指定了此变量,它应指向定义凭据的文件。为此目的获取凭据的最简单方法是使用 Api 和身份验证部分中的 Google 开发人员控制台创建一个服务帐户,在子部分的凭据中。创建服务帐户或选择现有帐户,然后选择“生成新的 JSON 密钥”。将环境变量设置为下载的 JSON 文件的路径。GOOGLE_APPLICATION_CREDENTIALS
  2. 如果您已在计算机上安装 Google Cloud SDK 并运行了命令 ,则可以将您的身份用作代理,以测试从该计算机调用 API 的代码。gcloud auth login
  3. 如果您在 Google App Engine 生产环境中运行,则将使用与该应用程序关联的内置服务帐户。
  4. 如果您在 Google Compute Engine 生产环境中运行,则将使用与虚拟机实例关联的内置服务帐户。
  5. 如果这些条件都不为真,则会发生错误。

看起来选项#2对您来说可能是最简单的(运行以使您的代码在本地运行时使用您的Google帐户进行身份验证),但您也可以执行#1。gcloud auth login


答案 2

我一直在使用GAE的PHP开发服务器,并且遇到了AppIdentity服务无法正常工作的相同问题。在 PHP 中,您可以通过将 设置为 .我相信一定有办法在Java中做同样的事情,你只需要在应用程序ID的开头之前使用开发环境。$_SERVER['APPLICATION_ID']dev~yourapplicationiddev~


推荐