我得到这个错误
{ "error":
{ "errors":
[
{ "domain": "calendar", "reason": "forbiddenForServiceAccounts", "message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority." }
],
"code": 403,
"message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority."
}
}
已关注此https://developers.google.com/admin-sdk/directory/v1/guides/delegation
我正在使用这个库,并在laravel 5.7上运行它:https://github.com/spatie/laravel-google-calendar
有什么办法可以解决这个问题。请帮帮忙。
6条答案
按热度按时间axr492tv1#
以下是完成此操作需要遵循的步骤:
在您的服务帐户中启用全域委派
1 -为服务帐户提供日历范围
2 -您的用户需要具有Service Account Token Creator角色
3 -在您要模拟的帐户中创建日历
服务帐户没有日历,因此您必须创建自己的日历
创建google客户端
代码示例:(我使用PHP,但我假设其他语言非常相似,所以你可以使用这个作为指导)
请注意,使用一些电子邮件进行IMPERSONALIZATION是至关重要的。否则,403错误将仍然存在,使用它进行身份验证,详细信息请参见Maksym Kalin响应。
与邀请的人一起创建活动:)并享受!
**注意:**使用此方法,您可以创建活动并邀请他人参加。请记住G Suite https://support.google.com/a/answer/2905486的限制,因此如果您想要创建许多活动,则需要具有日历池的服务帐户池。
f87krz0w2#
向服务帐户授予域范围权限的目的是使这些帐户能够代表域中的用户访问数据。
如果您授予它域范围的权限,但没有“模拟”任何帐户,则服务帐户的行为就像您没有授予此权限一样:它正在尝试访问自己的日历。
当服务帐户模拟域中的另一个用户时(即,当它代表该用户时),服务帐户可以访问该用户可以访问的资源。
要模拟另一个用户,你必须指定用户的电子邮件地址。在我的例子中,我使用Node.JS库,我的模拟代码看起来像这样:
更重要的是,如果您需要填写attendees[]数组,您必须授权服务帐户发送电子邮件。因为您会收到未经授权的错误。
为此,您需要在G Suite域的管理控制台上添加https://www.googleapis.com/auth/gmail.send作用域。
你可以在这里找到更多:https://issuetracker.google.com/issues/14170493
u3r8eeie3#
只是为了得到信息
在我的例子中,在Node.js上,我遵循@Anathorn的介绍,但我不断得到
服务帐户无法邀请没有全域授权的与会者
然后我在我的auth行上添加了我应该取代的电子邮件,它起作用了。
5f0d552i4#
对于那些使用googleapis-nodejs-client库的人,在google-auth-library-nodejs github页面上有一个问题的解决方案。
从@Anathorn执行所有conf步骤并以这种方式记录服务帐户对我来说很有效:
});
编辑:它只在本地工作!
据我所知,你不能使用App Default Credendial,而运行在GCP(云函数对我来说)与域宽权限,只有使用认证与JWT应该是工作。
hc8w905p5#
对于其他可能遇到这个问题的人来说,对我来说,这是Anathorn的答案和Maksym Kalin的答案的组合。这是因为我没有冒充用户的电子邮件地址。
一个用户以前曾试图提交你正在使用的库(我也在使用它),但被仓库所有者拒绝了(多么可悲)
https://github.com/spatie/laravel-google-calendar/pull/97
不管怎样,他的代码是我在我这边解决的。
祝任何有这个问题的人好运,它已经在我的屁股太长时间的痛苦。
xxslljrj6#
Yilo的解决方案工作正常:-)