谷歌域共享联系人API使用OAuth 2.0服务器到服务器应用程序-凭据参数



我试图得到这里描述的"谷歌域名共享联系人API":https://developers.google.com/admin-sdk/domain-shared-contacts/

使用"OAuth 2.0 for Server to Server Applications"工作:https://developers.google.com/accounts/docs/OAuth2ServiceAccount

OAuth页面的建议是使用提供的Google客户端库…我正在使用Java库。但是Shared-Contacts API没有使用这个库的示例,而且我很难弄清楚如何将这个库与Shared-Contacts API一起使用。

我能够使OAuth为我工作的例子…它使用谷歌云存储。下面是一段代码:

String STORAGE_SCOPE = "https://www.googleapis.com/auth/devstorage.read_write";
try {
          try {
      httpTransport = GoogleNetHttpTransport.newTrustedTransport();
      String p12Content = Files.readFirstLine(new File(keyFile), Charset.defaultCharset());
      // Build service account credential.
      GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
          .setJsonFactory(JSON_FACTORY)
          .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
          .setServiceAccountScopes(Collections.singleton(STORAGE_SCOPE))
          .setServiceAccountPrivateKeyFromP12File(new File(keyFile))
          .build();
      // Set up and execute Google Cloud Storage request.
      String URI;
      URI = "https://storage.googleapis.com/" + BUCKET_NAME;
      HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential);
      GenericUrl url = new GenericUrl(URI);
      HttpRequest request = requestFactory.buildGetRequest(url);
      HttpResponse response = request.execute();
      content = response.parseAsString();
          } catch (IOException e) {
              System.err.println(e.getMessage());
            }
          } catch (Throwable t) {
            t.printStackTrace();
          }   
      return content;

这是一个请求,以获得GCS上某个bucket中的列表。它使用凭据对象调用一个特定的URL,其中凭据对象使用我下载的密钥文件完成OAuth的工作。让它工作还涉及到其他步骤(设置服务帐户电子邮件等),我做到了。它返回一个包含桶内内容的xml字符串,它对我来说工作得很好。

然后我尝试将URI更改为以下字符串:URI = "https://www.google.com/m8/feeds/contacts/myGoogleAppsDomain.com/full";并且我将STORAGE_SCOPE变量更改为以下字符串:STORAGE_SCOPE = "http://www.google.com/m8/feeds/";

希望它会返回一个共享联系人的xml字符串。但相反,它返回以下错误:403无法请求属于其他域的联系人

我相信我得到这个错误,因为我没有指定"hd"参数,当我做身份验证请求…然而,我不确定如何使用GoogleCredential对象(或其他参数,除了"scope")指定"hd"参数…有人能帮我一下吗?

我认为这里的问题是您没有指定要在域中模拟哪个用户(并且您还没有配置域中的安全设置来授权服务帐户模拟域中的用户)。

双击API验证文档中有很好的例子说明如何做到这一点。您可以使用它们的示例并替换作用域和API端点:

https://developers.google.com/doubleclick-publishers/docs/service_accounts好处

相关内容

  • 没有找到相关文章

最新更新