Google apps Google联系人-使用服务帐户获取其他用户的联系人

Google apps Google联系人-使用服务帐户获取其他用户的联系人,google-apps,google-api-java-client,google-contacts-api,Google Apps,Google Api Java Client,Google Contacts Api,我正在尝试使用谷歌服务帐户获取其他用户的联系人。我甚至将用户凭据设置为要获取联系人的帐户的用户名和密码。但是,我在线程“main”com.google.gdata.util.ServiceBankedenException中不断收到一个错误-异常:无法请求属于另一个用户的联系人 最初,我使用管理员帐户获取另一个用户的联系人,我一直收到一个禁止的错误。有人告诉我,在这种情况下,服务帐户将起作用 有人能帮忙吗?是否真的可以通过服务帐户或任何其他方法获得另一个帐户的联系人?如果是,您知道我为什么会出现

我正在尝试使用谷歌服务帐户获取其他用户的联系人。我甚至将用户凭据设置为要获取联系人的帐户的用户名和密码。但是,我在线程“main”com.google.gdata.util.ServiceBankedenException中不断收到一个错误-异常:无法请求属于另一个用户的联系人

最初,我使用管理员帐户获取另一个用户的联系人,我一直收到一个禁止的错误。有人告诉我,在这种情况下,服务帐户将起作用


有人能帮忙吗?是否真的可以通过服务帐户或任何其他方法获得另一个帐户的联系人?如果是,您知道我为什么会出现此错误吗?

只有当您的服务帐户客户端在域级别被列入白名单时,您才能使用服务帐户访问其他人的联系人。换句话说,如果没有一些管理员权限,你不能随意地跨域获取他人的联系人


最简单的选择是使用OAuth 2 web服务器或客户端流,其中每个用户都必须授权您的数据访问。

如果您想使用服务帐户访问用户的联系人,您需要做三件事(请参阅):

  • 在中创建服务帐户
  • 使用域的权限将域范围的权限委托给服务帐户
  • (访问联系人所必需的:)通过使用
    GoogleCredential
    工厂的
    setServiceAccountUser
    方法指定用户帐户的电子邮件地址来模拟用户
  • 例如:

    GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(JSON_FACTORY)
      .setServiceAccountId(emailAddress)
      .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
      .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
      .setServiceAccountUser("user@example.com")
      .build();
    

    错误消息
    无法请求属于其他用户的联系人
    表明您忘记了最后一步。

    感谢您的回复。请详细说明“域级别的白名单”好吗?我该怎么做?我们正在尝试编写一个连接器,为谷歌应用程序用户和组提供服务。用户的密码不会存储在我们的数据库中。我们尝试使用OAuth2协议通过管理员访问获取其他用户的联系人。但是,它给出了403禁止的错误。对于服务帐户,我已尝试设置AccountCredentials。这也没用。我可能缺少的任何其他设置?请帮忙。