【问题标题】:Default credential for app engine project accessing google cloud storage?访问谷歌云存储的应用引擎项目的默认凭据?
【发布时间】:2015-09-08 00:47:05
【问题描述】:

我有一个应用引擎项目,我想访问我的谷歌云存储默认存储桶。获取 Credential 对象的第一步失败,在活动实例上执行以下操作:

Credential creds = GoogleCredential.getApplicationDefault();

我得到的异常消息:

“应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,它们可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。有关详细信息,请参阅https://developers.google.com/accounts/docs/application-default-credentials。”

这里的文档说生产应用程序引擎项目应该有权访问默认凭据?:

https://developers.google.com/identity/protocols/application-default-credentials

“3. 如果您在 Google App Engine 生产环境中运行,将使用与应用程序关联的内置服务帐户。”

我缺少一些设置吗?

我的应用引擎版本(gradle):

com.google.appengine:appengine-java-sdk:1.9.18

和谷歌云存储库版本:

com.google.apis:google-api-services-storage:v1-rev35-1.20.0

谢谢

【问题讨论】:

  • 我知道这个问题已经很久没有提出来了,但是您可以尝试使用包含您的私钥数据的 JSON 文件的路径导出此参数以设置默认的谷歌云帐户,export GOOGLE_APPLICATION_CREDENTIALS=/Users/googleCredentials.json

标签: google-app-engine google-cloud-storage


【解决方案1】:

转到 Google Developers Console -> Credentials 并创建一个默认服务帐户 .json 密钥。当你这样做时,它会为你下载一个像default-account-credentials.json 这样的文件。然后,您必须将该文件放在您的应用引擎项目中的某个位置。调用时会引用这个文件

Credential creds = GoogleCredential.getApplicationDefault();

但是,在此之前,您必须将环境变量设置为该文件位置。为此,请打开您的 appengine-web.xml 文件并将这一行放入其中:

<env-variables>
            <env-var name="GOOGLE_APPLICATION_CREDENTIALS"
                value="WEB-INF/default-account-credentials.json" />
        </env-variables>

其中value 是您刚刚下载的.json 凭据文件的路径。

现在它可以工作了。 (你的 gradle 进口很好)

【讨论】:

  • 我已经按照上面的步骤添加了下载文件的环境变量。我仍然收到异常:嵌套在 java.lang.ExceptionInInitializerError: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:484) 请建议是否需要执行任何其他步骤。提前感谢您的帮助。
  • 如何将文件放入应用引擎?文档说应用引擎将自动使用默认服务帐户。
  • 我不认为将凭据存储在您的应用中是正确的,根据文档,它们必须可以从应用引擎访问(正如作者所建议的那样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2014-10-30
  • 2017-05-02
  • 2018-05-09
  • 1970-01-01
  • 2015-05-16
相关资源
最近更新 更多