我正在尝试使用Google Contacts API和Python / GDATA客户端处理程序通过OAuth 2.0为域中的用户访问联系人。我最终想要创建一个Web服务来为用户添加联系人,但第一步是让这个测试工作。
如果我使用默认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))
似乎我在访问其他用户时遗漏了一些东西。有人能帮我解决这个驼峰吗?以下是我检查/确认过的一些事情:
谢谢你的时间!
答案 0 :(得分:1)
我在另一篇文章中找到了答案,其中包含非常详细的内容:
Domain-Wide Access to Google GDATA APIs
您需要使用“服务帐户”身份验证。出于某种原因,我认为这只适用于较新的基于发现的API。但是,服务帐户访问也适用于GDATA API。我现在可以访问域中用户的所有联系人。