首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用“域范围的授权委托”?

是否可以使用“域范围的授权委托”?
EN

Stack Overflow用户
提问于 2013-12-19 08:16:20
回答 1查看 3K关注 0票数 4

我使用gdata-python-client访问Google域共享联系人API

在企业应用程序中,您可能希望以编程方式访问用户数据,而不需要用户的任何手动授权。

有一个名为2LO (2条腿的OAuth)的协议,但似乎它被链接到了被废弃的OAuth1:“重要的是:取消了OAuth 1.0,关闭了新的OAuth 1.0客户端的注册。”到处都是Oauth1文档

有一个新的基于OAuth2的“全域权力下放”配方:

在Google领域,域管理员可以授予第三方应用程序域范围内对其用户数据的访问--这称为域范围的授权。要以这种方式委派权限,域管理员可以在OAuth 2.0中使用服务帐户。

这适用于google-api-python-client,但不适用于gdata-python-client

问题:有什么方法可以用实现这一点吗?gdata客户端的代码似乎是史前的--是否还有其他的GAE运行时带有支持数据API的委托的现代客户端库?

更新

如果我在httplib2连接上签名并调用Atom端点,我就能够检索提要。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-19 18:00:27

下面是一个如何在Python中使用gdata库在Google中进行域范围委托的示例:

  1. 创建一个项目(https://cloud.google.com/console#/project)。
  2. 在“API& Auth”下,启用您需要使用的API(一些gdata不会出现在这里,如果是,请跳过这个步骤)。
  3. 在“API& Auth”->“凭据”下,“创建一个新的服务帐户类型的OAuth2客户端ID”。请注意电子邮件地址和客户端ID,并保存下载到安全位置的私钥。
  4. 当域管理员转到管理控制台(https://admin.google.com/AdminHome)时,导航到“->”高级设置“->”托管的第三方OAuth客户端访问“。
  5. 将前面的完整客户端ID粘贴到"Client“字段,并将API访问所需的作用域粘贴到作用域字段。
  6. 由于我们在上运行,我们需要将PKCS12格式的私钥转换为PEM格式(因为目前部署在上的PyCrypto库不支持PCKS12): cat机密-Privatekey.p12\ openssl pkcs12 -nodes -nocerts -passin pass:notasecret rsa >crypatekey.pem
  7. 将此文件放入应用程序目录中。
  8. https://code.google.com/p/google-api-python-client/downloads/list下载Google客户机,选择google-api-python-client-gae-1.2.zip
  9. 将其解压缩到应用程序目录中: 解压缩~/Downloads/google-api-python-client-gae-1.2.zip
  10. https://code.google.com/p/gdata-python-client/downloads/list下载gdata客户机,选择gdata-2.0.18.zip
  11. 将其安装在应用程序目录中: 解压缩~/下载/gdata-2.0.18.zip mv 2.0.18/src/*。rm -rf gdata-2.0.18/
  12. 确保PyCrypto安装在本地(但不安装在应用程序目录中): sudo easy_install pycrypto
  13. app.yaml中,将PyCrypto添加为库: 库:-名称: pycrypto版本:"2.6“
  14. 声明以下助手类: 导入httplib2类TokenFromOAuth2Creds: def __init__(self,creds):self.creds = creds def modify_request(self,req):if self.creds.access_token_expired或not self.creds.access_token: self.creds.refresh(httplib2.Http() self.creds.apply(req.headers) )
  15. 使用私钥创建SignedJwtAssertionCredentials对象: 从oauth2client.client导入SignedJwtAssertionCredentials凭据= SignedJwtAssertionCredentials( "@developer.gserviceaccount.com",file(“oauth2client.client-Privatekey.pem”,"rb").read(),scope=“SignedJwtAssertionCredentials prn=”@you-domain.com)
  16. 创建一个gdata客户端并使用它: gdata.contacts.client.ContactsClient('your-domain.com') gd_client.auth_token =TokenFromOAuth2Creds(凭据) xxx = gd_client.get_contacts()
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20676513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档