1

为了使用新的 Google Directory API,我们创建了一个 OAuth2“服务帐户”(请参阅​​将 OAuth 2.0 用于服务器到服务器应用程序)。这基本上是一个 PKCS #12 文件。我们所有的 Directory API 脚本都可以在这个服务帐户上正常工作。

我们还使用 EmailSettings API(开发人员指南电子邮件设置 API)来管理我们的一些 Google 帐户设置。这些脚本没有迁移到新的 API 格式,所以我们继续使用旧的 OAuth1 身份验证方法。直到最近,这一直运作良好。但是,Google 似乎不再支持 OAuth1 身份验证。

因此,我们需要将 EmailSettings 脚本从 OAuth1 移动到我们的 OAuth2 服务帐户。我们使用gdataPython 库 ( 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)

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

4

1 回答 1

1

还有另一个 SO question向您展示了如何执行此操作,但使用了稍微更新的gdata.apps.emailsettings.client方法。

如果您必须留下来,gdata.apps.emailsettings.service那么您可以通过以下方式将 OAuth 2.0“破解”到对象上:

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

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

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

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

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

于 2015-05-19T12:50:50.543 回答