Аутентификация Google App Engine для API Google с использованием учетной записи службы

#python #google-app-engine #calendar #google-oauth

#python #google-app-engine #Календарь #google-oauth

Вопрос:

TL; DR Каков предпочтительный способ сделать это сейчас, когда учетные записи служб нуждаются в настройке делегирования по всему домену?

У меня есть проект GAE (среда выполнения python 2.7), который использует Google Calendar API v3. До прошлой недели я использовал учетную запись службы GAE по умолчанию для подключения к API календаря, и учетной записи службы было предоставлено разрешение на чтение / запись в календарь в настройках общего доступа к календарю.

С прошлого четверга, 20 октября, учетная запись службы не может выполнять запись в календарь (events.post или events.patch) — возвращает 403 запрещенных значения — а чтение (events.list) возвращает 200, но записей нет. При проверке разрешений для учетной записи в разделе общий доступ к календарю оно было изменено на «Видеть только свободное / занятое».

Я полагаю, что это связано с объявлением Google о закрытии учетных записей службы OAuth 1.0 от 20 октября: https://developers.googleblog.com/2016/04/saying-goodbye-to-oauth-10-2lo.html

Рекомендация, по-видимому, заключается в предоставлении делегирования учетной записи службы в масштабах всего домена: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority Однако учетная запись службы GAE по умолчанию не содержит списка a client_id . Итак, мы создали новую учетную запись службы и предоставили ей делегирование по всему домену.

Но новая учетная запись службы работает ничуть не лучше. Я попытался использовать оба AppAssertionCredentials , создал файл ключа JSON и попробовал использовать ServiceAccountCredentials , как подробно описано на https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

AppAssertionCredentials похоже, не работает, потому что учетная запись не является учетной записью службы по умолчанию, даже передавая service_account_id параметр.

ServiceAccountCredentials обновляет ключ и т.д. Но я получаю то же поведение, что и с учетной записью службы по умолчанию: 403 запрещенных ошибки при записи и отсутствие записей, возвращаемых при чтении.

Я дважды проверил, что для новой учетной записи службы настроено делегирование по всему домену, и в разрешениях календаря оно указано как «Вносить изменения в события».

Редактировать:

Мы также смогли настроить делегирование в масштабах всего домена для учетной записи службы GAE по умолчанию. Однако он по-прежнему не работает, используя ни AppAssertionCredentials , ни ServiceAccountCredentials . Я получаю то же поведение: 403 запрещенных ошибки при записи и отсутствие записей, возвращаемых при чтении.

ПРАВКА #2:

Мы также попытались создать новую учетную запись службы с нуля, установив DwD и разрешения для учетной записи в календаре. То же поведение, а разрешения календаря принудительно отображаются как «Видеть только свободные / занятые», при этом другие параметры выделены серым цветом.