Google Calendar api权限-服务帐户



我有一个修改GCal提供的工作的脚本。对于身份验证,我使用访问/刷新令牌(如:https://developers.google.com/people/quickstart/python)。

我现在想在Docker中运行脚本。对于身份验证,我决定使用服务帐户。

我已经创建了服务帐户,与它共享了我的日历,并接受了日历。在创建服务帐户的Google Console中,我将权限设置为"owner"。

当我尝试使用服务帐户运行脚本时(还没有在Docker中),它只返回每个日历事件的属性子集。我可以看到accessRole = freeBusyReader.

如何授予该服务帐户的写访问权限?我试过了:

rule = service.acl().get(calendarId="myId", ruleId='user:service@myApp-351310.iam.gserviceaccount.com').execute()  # Get this from acl_items
rule["role"] = "owner"
service.acl().update(calendarId="myId", ruleId="user:service@myApp-351310.iam.gserviceaccount.com", body=rule).execute()

我读过关于公司范围内的用户委托和模拟。我不确定是否需要这样做。有人知道怎么做吗?

验证服务帐户的代码与您在已安装的应用程序中使用的示例略有不同,如下所示:

credentials = ServiceAccountCredentials.from_json_keyfile_name(
key_file_location, scopes=scopes)
credentials = credentials.create_delegated(user_email)

这个视频展示了如何创建Google Oauth2服务帐户凭据。只要确保启用Google日历api。

请记住,服务帐户只支持通过域范围授权给用户在您的谷歌工作空间域。你不能使用标准的google gmail用户。

我建议按照将域范围内的权限委托给您的服务帐户示例进行操作,它展示了如何从您的工作空间域设置对服务帐户的委托。只需将关于admin sdk的部分更改为google calendar的部分,因为这是您试图连接的api。

您将user_Email添加为您希望服务帐户模拟的域上的用户。

最新更新