如何使用Oauth v2在Fusion表中进行身份验证

时间:2013-05-07 22:46:41

标签: oauth-2.0 google-fusion-tables google-oauth

我正在尝试执行以下示例:

https://code.google.com/p/google-api-java-client/source/browse?repo=samples#hg%2Ffusiontables-cmdline-sample

这基本上是如何验证和使用Fusion API的示例。我无法让它发挥作用......此时:

// authorize
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");

浏览器显示“错误:redirect_uri_mismatch”。

这里奇怪的是,使用Oauth(谷歌加API和云存储)进行身份验证的其他示例不使用与此相同的方法,基本上包括使用您可以下载一次的JSON文件已通过API控制台创建服务帐户。

实际上,有一个问题使用了这个例子中的方法:

Google Fusion Tables 400 invalid_grant

我的主要问题是......哪一个是正确的?我不确定这个

第二个是......这个例子在JSON文件中查找一个名为client-secret的项目,我没有。我不认为这是导致代码不可行的原因,但我想知道这个客户秘密的东西是什么......

非常感谢有关如何进行的一些见解

谢谢! 亚历

1 个答案:

答案 0 :(得分:0)

好吧,如果有人遇到和我一样的情况......我会发布我发现的解决方案。我所做的基本上是修改了这个例子(特别感谢Christian Junk的工作)所以当涉及到身份验证时,它看起来更像是其他的例子(存储和加号)。

    HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

    // check for valid setup
    if (SERVICE_ACCOUNT_EMAIL.startsWith("Enter ")) {
      System.err.println(SERVICE_ACCOUNT_EMAIL);
      System.exit(1);
    }
    String p12Content = Files.readFirstLine(new File("key.p12"), Charset.defaultCharset());
    if (p12Content.startsWith("Please")) {
      System.err.println(p12Content);
      System.exit(1);
    }
    // service account credential (uncomment setServiceAccountUser for domain-wide delegation)
    GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
        .setServiceAccountScopes(FusiontablesScopes.FUSIONTABLES)
        .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
        // .setServiceAccountUser("user@example.com")
        .build();


    // set up global FusionTables instance
    fusiontables = new Fusiontables.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();

这与原始示例的方法不同,但它适用于我,我可以列出表,创建新表,填充它们并删除它们。

我只是希望在Oauth和Fusion表格文档页面中更容易找到这些示例,这样可以节省一些宝贵的时间:)