AdminSettings API, использующий аутентификацию учетной записи службы / сбои ключевых слов

Попытка получить номер домена пользователей, GetCurrentNumberOfUsers(), используя AdminSettings API через учетную запись службы в Python. Включено делегирование широких полномочий и области действия, но получение ошибок. Я использовал служебную учетную запись для API Календаря, API Каталога, API EmailSettings, но не работал для AdminSettings. Попробовал пример кода по адресу: github.com/Khan/gdata-python-client/blob/master/samples/apps/adminsettings_example.py, но получил ошибку "Требуется авторизация" при использовании правильных учетных данных для учетной записи администратора: API Client Acccess

from oauth2client.client import SignedJwtAssertionCredentials
import gdata.gauth
import gdata.apps.service
import gdata.apps.adminsettings.service

SERVICE_ACCOUNT_EMAIL = "XXXXXXXXXXXXX-ebirq08jvhldahbb482u8a1otu9n3l8p.apps.googleusercontent.com"
SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'gapi_admin/privatekey.p12'
f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/domain/', sub='admin@xxxtestmail.edu')
auth2token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
service = gdata.apps.adminsettings.service.AdminSettingsService(source="testApp", domain='xxxtestmail.edu')
service = auth2token.authorize(service)

print service.GetCurrentNumberOfUsers()

#output
#TypeError: new_request() takes exactly 1 non-keyword argument (2 given)

отлично работает в OAuth2 Playground, смотрите Скриншот.

1 ответ

Решение

Старые объекты службы библиотеки GData Python на самом деле не поддерживают OAuth 2.0, и это то, что вам нужно использовать. Однако вы можете взломать токен доступа там. Попробуйте что-то вроде:

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/domain/', sub='admin@xxxtestmail.edu')
credentials.refresh(httplib2.Http())
service = gdata.apps.adminsettings.service.AdminSettingsService(source="testApp", domain='xxxtestmail.edu')
service.additional_headers[u'Authorization'] = u'Bearer {0}'.format(credentials.access_token)

print service.GetCurrentNumberOfUsers()
Другие вопросы по тегам