【发布时间】:2013-12-19 08:16:20
【问题描述】:
我正在使用gdata-python-client 访问Google Domain Shared Contacts API。
在企业应用程序中,您可能希望在没有任何手动授权的情况下以编程方式访问用户数据。
有一个称为 2LO(2 腿 OAuth)的协议,但似乎它与已弃用的 OAuth1 相关联:“重要提示:OAuth 1.0 已弃用,新 OAuth 1.0 客户端的注册已关闭。”遍布Oauth1 docs。
“Domain-wide Delegation of Authority”有一个基于 OAuth2 的新配方:
在 Google Apps 域中,域管理员可以向第三方应用程序授予域范围内访问其用户数据的权限 — 这称为域范围内的授权。要以这种方式委派权限,域管理员可以使用具有 OAuth 2.0 的服务帐户。
这适用于google-api-python-client,但不适用于gdata-python-client。
问题:有没有办法用 Python 实现这一点?似乎来自 gdata 客户端的代码是史前的 - 是否有任何其他 GAE 运行时具有支持数据 API 委托的现代客户端库?
[更新]
如果我签署一个 httplib2 连接并调用 Atom 端点,我就能够检索提要。
http = httplib2.Http()
http = credentials.authorize(http)
resp, content = http.request(
'https://www.google.com/m8/feeds/contacts/default/full', 'GET'
)
不幸的是 gdata-python-client 使用 httplib 而不是 httplib2。
[已解决]
也许我错过了一些步骤,但看起来令牌在我们使用 httplib2 执行调用之前无效。在运行 [aeijdenberg] 的答案中给出的示例之前,我必须运行上述代码,否则我会得到 401。
【问题讨论】:
-
您简要地提到了 GAE - 这是否打算部署在 Google App Engine 上?如果是这样 - 您需要做一些额外的工作才能让 SignedJwtAssertionCredentials 正常运行。如果需要,请告诉我,我会深入了解如何做到这一点。
-
是的,它应该在 GAE 上托管。
-
我已修改答案以包含 GAE 的步骤。
标签: python google-oauth