首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TokenResponseException:在独立应用程序上使用RemoteAPI of AppEngine和OAuth 2.0时缺少的范围

TokenResponseException:在独立应用程序上使用RemoteAPI of AppEngine和OAuth 2.0时缺少的范围
EN

Stack Overflow用户
提问于 2015-11-11 16:31:29
回答 1查看 1.5K关注 0票数 1

我的目标是让我的独立应用程序访问Google应用程序的数据存储,以便我能够查询它。我的应用程序过去使用过ClientLogin,但有人要求我使用OAuth 2.0进行身份验证(并且使用ClientLogin不再有效)。

我按照这个页面上的说明:https://cloud.google.com/appengine/docs/java/tools/remoteapi

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

代码语言:javascript
复制
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

这似乎指向了一个缺失的范围参数,在网页上的解释中没有提到这个问题。有什么简单的方法可以解决这个问题吗?

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

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-17 22:32:37

这是当前远程API的一个限制。见注这里

注意:对useApplicationDefaultCredential()的远程API调用只能使用gcloud命令提供的凭据。

(由于这是最近发现的一个限制,在添加注释之前,您可能会按照说明进行操作)。这一限制将在以后的发行版中确定。现在,您应该要么运行:

代码语言:javascript
复制
gcloud auth login

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33655205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档