【问题标题】:Authorizing a python script to access the GData API without the OAuth2 user flow授权 python 脚本在没有 OAuth2 用户流的情况下访问 GData API
【发布时间】:2016-12-04 18:48:48
【问题描述】:

我正在编写一个小的 Python 脚本,它将检索我的 Google 联系人列表(使用 Google Contacts API)并随机建议我联系一个人(自动与朋友保持联系的好方法!)

这只是我计划在 cron 作业中安排的独立脚本。问题是谷歌似乎需要 OAuth2 风格的身份验证,用户(我)必须批准访问,然后应用程序会收到一个授权令牌,然后我可以使用它来查询用户(我的)联系人。

由于我只访问自己的数据,有没有办法对自己进行“预授权”?理想情况下,我希望能够检索一些授权令牌,然后运行脚本并将该令牌作为环境变量传递

AUTH_TOKEN=12345 python my_script.py

这样一来,它就不需要用户输入/交互来授权一次。

【问题讨论】:

    标签: python gdata oauth2


    【解决方案1】:

    您描述的实现调用完整的“三足”OAuth 握手,这需要明确的用户同意。如果您不需要用户同意,您可以改为通过 Google service account 使用“双腿”OAuth,它与 应用程序,而不是 用户 绑定.将granted permission 加入您的服务帐户以访问您的联系人后,您可以使用oauth2client ServiceAccountCredentials class 直接访问 GData,而无需用户同意。

    这是来自Google service account documentation 的两条腿身份验证示例:

    import json
    
    from httplib2 import Http
    
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    scopes = ['https://www.googleapis.com/auth/sqlservice.admin']
    
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            'service-account.json', scopes)
    
    sqladmin = build('sqladmin', 'v1beta3', credentials=credentials)
    response = sqladmin.instances().list(project='examinable-example-123').execute()
    
    print response
    

    【讨论】:

    • 谢谢!这就说得通了。小型跟进 - 我链接到的 Google Contacts API 页面中的 python 示例似乎使用了gdata python 库(例如import gdata.contacts.client)。您提供的示例似乎使用了 oauth2clientapiclient 库。 gdata 库是否仅支持您描述的完整三足身份验证,还是有办法让我仍然使用gdata python 客户端库的服务帐户/两足身份验证方法?只是想更好地理解为什么似乎有两个库都访问相同的 API
    • 我不确定gdata 库是否支持这两种方法,但oauth2client 库是由Google 创建和开发的。也就是说,gdata 库文档 dates to 2007,而 oauth2client 库在 2016 年年中似乎是 actively supported
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多