Java 在使用IntelliJ IDEA进行调试时,如何向Google App Engine添加服务帐户凭据?

Java 在使用IntelliJ IDEA进行调试时,如何向Google App Engine添加服务帐户凭据?,java,google-app-engine,google-cloud-platform,google-cloud-iam,Java,Google App Engine,Google Cloud Platform,Google Cloud Iam,我正在开发一个使用谷歌云存储的谷歌应用程序引擎(标准环境)应用程序。到目前为止,我一直使用它,它使用数据存储为云存储提供本地模拟。由于这些API现在已经过时,我决定使用,但是在本地服务器上运行时,我很难使用凭据(我已经在使用新的,而不是旧的) 我已经创建了一个服务帐户,我已经创建并下载了它的密钥。如果我运行一个普通的Java应用程序,我将能够为VM指定环境变量,并且我可以提供必要的-DGOOGLE_APPLICATION_CREDENTIALS=xxxxx.json参数。云代码提供的服务器似乎没

我正在开发一个使用谷歌云存储的谷歌应用程序引擎(标准环境)应用程序。到目前为止,我一直使用它,它使用数据存储为云存储提供本地模拟。由于这些API现在已经过时,我决定使用,但是在本地服务器上运行时,我很难使用凭据(我已经在使用新的,而不是旧的)

我已经创建了一个服务帐户,我已经创建并下载了它的密钥。如果我运行一个普通的Java应用程序,我将能够为VM指定环境变量,并且我可以提供必要的
-DGOOGLE_APPLICATION_CREDENTIALS=xxxxx.json
参数。云代码提供的服务器似乎没有任何方式来提供环境变量,我只能提供VM选项,因此我不知道如何向其提供必要的环境,或者如何以其他方式向其传递凭据。我让它工作的唯一方法就是使用

gcloud auth应用程序默认登录

已将凭据保存在
D:\Users\xxxx\AppData\Roaming\gcloud\application\u default\u credentials.json
中。这是可行的,但每当我调试应用程序时,都会收到以下警告:

com.google.auth.oauth2.DefaultCredentialsProvider警告关于问题凭据

警告:您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行身份验证。我们建议大多数服务器应用程序改用服务帐户。如果您的应用程序继续使用云SDK中的最终用户凭据,您可能会收到“超出配额”或“API未启用”错误

我不知道这个警告有多严重,但对我来说确实很可怕

在我的应用程序中,我使用以下代码(Scala、Java非常类似)创建具有凭据的服务:

  val credentials = GoogleCredentials.getApplicationDefault
  val storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService

在本地Google App Engine服务器上运行时,传递服务帐户凭据的正确方法是什么?

大警告的问题是,Google不希望您使用用户凭据代替服务帐户凭据。谷歌正在锁定(限制)第三方服务(您)可以请求的范围/数据。我的建议是不要再使用用户凭据,因为它们最终将不再工作

有几种方法可以解决这个问题

方法1:设置CLI以使用服务帐户:

gcloud auth activate-service-account test@development.iam.gserviceaccount.com --key-file=test_google_account.json
请为服务帐户使用正确的电子邮件地址。这可以在谷歌云控制台和JSON文件中找到。谷歌图书馆将找到这些凭证。在我的网站上,我写了几篇关于服务帐户、应用程序默认凭据(ADC)等详细信息的文章

方法2:在代码中指定服务帐户

credentials = GoogleCredentials.fromStream(new FileInputStream(service_account_filename))

创建一个标志或环境变量,以便您的代码可以在桌面上运行时决定是否处理凭据

方法3:

如果设置了系统(而不是VM命令行)环境变量
GOOGLE\u APPLICATION\u CREDENTIALS
,则库将使用该变量指向的文件名作为服务帐户凭据。此文件是一个JSON格式的Google云服务帐户凭据文件

在启动IntelliJ之前设置此环境变量

我的文档链接:


“创建标志或环境变量”我想我会根据生产/开发环境来决定。