gpt4 book ai didi

java - 独立应用程序上的 TokenResponseException : missing scope when using the RemoteAPI of AppEngine in Java with OAuth 2. 0

转载 作者:行者123 更新时间:2023-11-30 07:48:10 25 4
gpt4 key购买 nike

我的目标是让我的独立应用程序访问 Google App Engine 应用程序的数据存储区,以便我可以查询它。我的应用程序曾经使用 ClientLogin,但我被要求使用 OAuth 2.0 进行身份验证(并且使用 ClientLogin 不再起作用)。

我按照此页面上的说明进行操作:https://cloud.google.com/appengine/docs/java/tools/remoteapi

我使用提供的代码,创建了一个服务帐户,下载了 json key ,创建了一个指向该 key 的环境变量。结果是我得到以下异常:

Exception in thread "main" java.lang.ExceptionInInitializerError
at myApplication.myClass4.moveResultsOfFeature(myClass4.java:51)
at myApplication.myClass2.migrate(MyClass3.java:32)
at myApplication.myClass1.main(Starter.java:11)
Caused by: java.lang.RuntimeException: Failed to acquire Google Application Default credential.
at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:163)
at commonMigration.RemoteOptions.<clinit>(RemoteOptions.java:18)
... 3 more
Caused by: com.google.appengine.repackaged.com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_scope",
"error_description" : "Empty or missing scope not allowed."
}
at com.google.appengine.repackaged.com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.appengine.repackaged.com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.appengine.repackaged.com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.appengine.repackaged.com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
at com.google.appengine.repackaged.com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:160)
... 4 more

这似乎指向缺少范围参数,这是网页上的说明中未提及的问题。有没有简单的方法可以解决这个问题?

根据请求,我的代码(简化):

public class StackOverflow {

private static RemoteApiOptions REMOTE_OPTIONS = new RemoteApiOptions().server(
<application-id>.appspot.com, 443)
.useApplicationDefaultCredential();

public static void main(String[] args0) throws IOException {
// MAKING THE CONNECTION
RemoteApiInstaller installer = new RemoteApiInstaller();
// LOAD FROM Local
installer.install(REMOTE_OPTIONS);
try {
// MY OPERATIONS
} finally {
installer.uninstall();
}
}
}

最佳答案

这是远程 API 的当前限制。请参阅注释here :

Note: The Remote API call to useApplicationDefaultCredential() can only use credentials provided by the gcloud command.

(您可能在添加注释之前按照说明进行操作,因为这是最近发现的限制)。该限制将在未来版本中修复。现在,您应该运行:

gcloud auth login

并使用您的用户帐户使用 useApplicationDefaultCredential() 进行身份验证。或者,您可以将服务帐户与 .useServiceAccountCredential 结合使用,它接受服务帐户电子邮件和 p12 文件的路径,而不是 json文件。

关于java - 独立应用程序上的 TokenResponseException : missing scope when using the RemoteAPI of AppEngine in Java with OAuth 2. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33655205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com