使用服务帐户

时间:2016-10-24 16:33:14

标签: python google-app-engine calendar google-oauth

TL; DR现在服务帐户需要设置域范围的委派,首选的方法是什么?

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

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

我认为这与Google于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写入时出现禁止错误,读取时没有返回任何记录。

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

修改

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

编辑#2

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

0 个答案:

没有答案