将Google EmailSettings API python代码从OAuth1移至OAuth2服务帐户

时间:2015-05-17 04:47:55

标签: python oauth google-api google-email-settings-api

要使用新的Google Directory API,我们创建了OAuth2“服务帐户”(请参阅​​Using OAuth 2.0 for Server to Server Applications)。这基本上是PKCS#12文件。我们所有的Directory API脚本都可以正常使用此服务帐户。

我们还使用EmailSettings API(Developer's Guide Email Settings API)来管理我们的部分Google帐户设置。这些脚本移动到新的API格式,因此我们继续使用旧的OAuth1身份验证方法。直到最近,这一点工作正常。但是,Google似乎不再支持OAuth1身份验证。

因此,我们需要将EmailSettings脚本从OAuth1移动到我们的OAuth2服务帐户。我们使用gdata Python库(GitHub google/gdata-python-client)来调用EmailSettings API。这就是我们当前进行身份验证以进行EmailSettings API调用的方式:

import gdata.apps.emailsettings.service
# self is an EmailSettingsService object (gdata.apps.emailsettings.service)
self.domain = "mydomain.com"
self.source = "my application name"
token = get OAuth1 token string from a file
self.SetOAuthInputParameters(
  gdata.auth.OAuthSignatureMethod.HMAC_SHA1,
  consumer_key    = token.oauth_input_params._consumer.key,
  consumer_secret = token.oauth_input_params._consumer.secret
  )
token.oauth_input_params = self._oauth_input_params
self.SetOAuthToken(token)

使用这些Python gdata库,如何使用我们的OAuth2服务帐户(即PKCS#12文件)进行身份验证,以使用EmailSettings API?

1 个答案:

答案 0 :(得分:1)

我们another SO question向您展示了如何执行此操作,但使用稍微更新的gdata.apps.emailsettings.client方法。

如果你必须留在gdata.apps.emailsettings.service那么你可以" hack"将OAuth 2.0添加到对象上,例如:

  1. 构建您的OAuth 2.0 credentials对象,就像您已经为管理SDK目录API调用所做的那样。

  2. 正如您在代码的第1-3行中所做的那样构建GData客户端对象。

  3. 从您的凭证对象中获取访问令牌,并将其作为标题应用于您的客户端对象:

    client.additional_headers = { 'Authorization': u'Bearer %s' % credentials.access_token}

  4. 如果您收到401响应(访问令牌已过期),请重复1和3以获取并应用新的访问令牌。