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服务帐户设置域范围的委派 . 但是,它仍然无法使用 AppAssertionCredentials
或 ServiceAccountCredentials
. 我得到了相同的行为:403写入时出现禁止错误,读取时没有返回记录 .
EDIT #2 :
我们还尝试从头开始设置新的服务帐户,设置DwD以及日历上帐户的权限 . 相同的行为,日历权限被强制为“仅查看忙/闲”,其他选项显示为灰色 .