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

How to authorize a Python Google API client service given an OAuth2 access_token?

我已经在我的 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.

提供的例子

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

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

The oauth2client.client.AccessTokenCredentials class is used when you have already obtained an access token by some other means. You can create this object directly without using a Flow object.

示例:

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)

如果您有一个已经刷新但未过期的最新访问令牌,那么您可以获得 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