TL;DR What is the preferred way of doing this now that service accounts need domain-wide delegation set up?

我有一个使用Google Calendar API v3的GAE项目(python 2.7运行时) . 截至上周,我一直使用默认的GAE服务帐户连接到日历API,并且服务帐户在日历共享设置下获得了对日历的读/写权限 .

自10月20日上周四以来,服务帐户无法写入日历(events.post或events.patch) - 返回403 Forbidden - 并且read(events.list)返回200,但没有记录 . 在日历共享下检查帐户的权限,它已更改为“仅查看忙/闲” .

我相信这与谷歌关于在10月20日关闭OAuth 1.0服务帐户的公告有关:https://developers.googleblog.com/2016/04/saying-goodbye-to-oauth-10-2lo.html

建议似乎是将域范围授权授予服务帐户:https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority但是,GAE默认服务帐户未列出 client_id . 因此,我们设置了一个新的服务帐户,并授予其域范围授权 .

但新的服务帐户不会更好 . 我尝试使用 AppAssertionCredentials ,并创建了一个JSON密钥文件并尝试使用 ServiceAccountCredentials ,详见https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

AppAssertionCredentials 似乎不起作用,因为该帐户不是默认服务帐户,即使传入 service_account_id 参数 .

ServiceAccountCredentials 确实刷新了密钥等,但我得到了与默认服务帐户相同的行为:403写入时出现禁止错误,读取时没有返回记录 .

我已经仔细检查了新服务帐户是否设置了域范围,并且在日历权限下将其列为“对事件进行更改” .

EDIT

我们还能够为默认的GAE服务帐户设置域范围的委派 . 但是,它仍然无法使用 AppAssertionCredentialsServiceAccountCredentials . 我得到了相同的行为:403写入时出现禁止错误,读取时没有返回记录 .

EDIT #2

我们还尝试从头开始设置新的服务帐户,设置DwD以及日历上帐户的权限 . 相同的行为,日历权限被强制为“仅查看忙/闲”,其他选项显示为灰色 .