Переместите код Python Google EmailSettings API из OAuth1 в учетную запись службы OAuth2.

Чтобы использовать новый API-интерфейс Google Directory, мы создали "служебную учетную запись" OAuth2 (см. Использование OAuth 2.0 для серверных приложений). В основном это файл PKCS #12. Все наши скрипты API каталогов работают нормально с этой учетной записью службы.

Мы также используем API EmailSettings (API-интерфейс настроек электронной почты для Руководства разработчика), чтобы управлять некоторыми настройками нашей учетной записи Google. Эти сценарии не были перенесены в новый формат API, поэтому мы продолжаем использовать старый метод аутентификации OAuth1. До недавнего времени это работало нормально. Однако, похоже, что Google больше не поддерживает аутентификацию OAuth1.

Итак, нам нужно переместить сценарии EmailSettings из OAuth1 в нашу учетную запись службы OAuth2. Мы используем gdata Библиотеки Python ( https://github.com/google/gdata-python-client) для вызова API EmailSettings. Вот как мы в настоящее время проводим аутентификацию для выполнения вызовов API EmailSettings:

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, для использования API EmailSettings?

1 ответ

Решение

Есть еще один вопрос, который показывает вам, как это сделать, но использует немного более новый gdata.apps.emailsettings.client методы.

Если вы должны остаться с gdata.apps.emailsettings.service тогда вы можете "взломать" OAuth 2.0 на объект с помощью чего-то вроде:

  1. Создайте свой OAuth 2.0 credentials объект, как вы уже делаете для ваших вызовов API Admin SDK Directory.

  2. Создайте свой клиентский объект GData, как вы уже делаете в строках 1-3 вашего кода.

  3. Возьмите токен доступа из вашего объекта учетных данных и примените его в качестве заголовка к вашему клиентскому объекту:

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

Если вы получили ответ 401 (срок действия маркера истек), повторите 1 и 3, чтобы получить и применить новый токен доступа.

Другие вопросы по тегам