我正在尝试使用Google服务帐户获取其他用户的联系人。我甚至将用户凭据设置为我想要获取联系人的帐户的用户名和密码。但是,我一直收到错误 - 线程“main”中的异常com.google.gdata.util.ServiceForbiddenException:无法请求属于其他用户的联系人
最初我使用管理员帐户来获取另一个用户的联系人,我一直收到Forbidden错误。我被告知服务帐户将在这种情况下工作。
有人可以帮忙吗?是否真的可以通过服务帐户或任何其他方法获取其他帐户的联系人?如果是的话,任何想法为什么我必须得到这个错误?
答案 0 :(得分:1)
如果您想使用服务帐户访问用户的联系人,则需要做三件事(请参阅https://developers.google.com/accounts/docs/OAuth2ServiceAccount):
setServiceAccountUser
工厂的GoogleCredential
方法指定用户帐户的电子邮件地址。例如:
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();
错误消息Cannot request contacts belonging to another user
表示您忘记了最后一步。
答案 1 :(得分:0)
如果您的服务帐户客户端在域级别列出白名单,则您只能使用服务帐户访问其他人的联系人。换句话说 - 如果没有管理员访问权限,您就不能在跨越域边界的任意地获取其他人的联系人。
最简单的选择是使用OAuth 2 Web服务器或客户端流程 - 每个用户必须授权您访问数据。