1

我正尝试使用Google Contacts API和Python/GDATA客户端处理程序通过OAuth 2.0为域中的用户访问联系人。我最终想创建一个Web服务来为用户添加联系人,但第一步是让这个测试工作。Google Contacts API - 访问其他用户

我可以访问我自己的联系人就好,如果我使用默认的URI。但是,当我传递电子邮件地址来为其他用户构建URI时,我似乎无法访问其他用户的联系人。以下是我正在使用的代码:

client.GetContacts(uri=client.GetFeedUri(contact_list=userEmail)) 

执行此操作时会返回403错误。

gdata.client.RequestError: Server responded with: 403 

Your client does not have permission to get URL /m8/feeds/contacts/<userEmail>/full from this server. 

大部分只是试图了解是否我在这里尝试甚至可能。例如,在电子邮件设置API中,您可以通过域的身份验证并传递用户的电子邮件以列出其标签,添加过滤器等。因此,我预计Contacts API的工作原理相同,但处理方式稍有不同即修改URI,而不是仅仅将参数传递给客户端处理程序。如果我在这种推定中错了,请让我知道。

对于授权,我使用flow_from_clientsecrets获取详细信息,然后获取令牌以授权域名的ContactsClient。再次,我可以访问我自己的联系人,因此授权似乎没问题,但我无法访问其他用户的联系人。

client = token.authorize(ContactsClient(domain=domain)) 

好像我错过了一些关于访问其他用户的内容。有人能帮助我克服这个麻烦吗?下面是我查了一些事情/证实:

  • 联系人API为
  • 作用域已被授权在控制面板中的客户端ID的项目启用>管理第三方接入
  • 我超级管理员在域中。

感谢您的时间!

回答

1

我从另一篇文章具有卓越的细节在这里找到了答案:

Domain-Wide Access to Google GDATA APIs

你需要使用“服务帐户”身份验证。出于某种原因,我认为这只适用于更新的基于发现的API。但是,服务帐户访问也适用于GDATA API。我现在可以访问域中用户的所有联系人。