如何在给定OAuth2 access_token的情况下授权Python Google API客户端服务?

时间:2016-12-17 23:32:47

标签: python google-oauth2 google-api-python-client python-social-auth oauth2client

我已在我的Django项目中为Google OAuth2实施了python-social-auth库,并成功地使用它来记录用户。该库存储了Google的OAuth2流程响应中收到的access_token

我的问题是:使用google-api-python-client似乎依赖于创建和授权credentials对象,然后使用它来构建API service,如下所示:

...
# send user to Google consent URL, get auth_code in response

credentials = flow.step2_exchange(auth_code)
http_auth = credentials.authorize(httplib2.Http())

from apiclient.discovery import build
service = build('gmail', 'v1', http=http_auth)

# use service for API calls...

由于我从python-social-auth提供的access_token开始,我该如何创建&授权API客户端service以进行未来的API调用?

修改:澄清一下,上面的代码来自Google提供的示例。

3 个答案:

答案 0 :(得分:4)

鉴于您已拥有OAuth2访问令牌,您可以使用AccessTokenCredentials类。

  

当您已通过其他方式获取访问令牌时,将使用oauth2client.client.AccessTokenCredentials类。您可以直接创建此对象,而无需使用Flow对象。

示例:

import httplib2
from googleapiclient.discovery import build
from oauth2client.client import AccessTokenCredentials

credentials = AccessTokenCredentials(access_token, user_agent)
http = httplib2.Http()
http = credentials.authorize(http)
service = build('gmail', 'v1', http=http)

答案 1 :(得分:0)

您可以查看Google Guide API提供的示例,例如:通过Gmail应用程序发送电子邮件,https://developers.google.com/gmail/api/guides/sending

答案 2 :(得分:0)

如果您有一个已刷新的最新访问令牌,并且该令牌尚未过期,则可以将service变量获取为:

from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials


creds = Credentials("<ACCESS_TOKEN>")
service = build('gmail', 'v1', credentials=creds)

# Call the Gmail API