带有G Suite帐户插入的Google日历获得403

时间:2020-04-07 06:42:45

标签: calendar google-calendar-api

我需要使用G Suite帐户插入包含视频群聊聚会的日历 但我什至不能插入事件,我总是得到403响应

403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "calendar",
    "message" : "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority.",
    "reason" : "forbiddenForServiceAccounts"
  } ],
  "message" : "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority."
}

我使用GCP p12文件和服务帐户来制作日历。

我还单击“启用G Suite全域委托”框,并添加我的clientId和范围

https://www.googleapis.com/auth/admin.directory.resource.calendarhttps://www.googleapis.com/auth/calendar.events

在G Suite管理控制台上

可能是什么问题!?

顺便说一句,我是否需要设置OAuth同意屏幕!?我已经保存了它,但未得到Google的批准。

任何人都可以帮忙!

一开始,我通过以下代码获取凭据

credentials = new GoogleCredential.Builder().setTransport(httpTransport).setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId(CalendarEntity.CALENDARID)
                    .setServiceAccountPrivateKeyFromP12File(new File(P12FILEPATH))
                    .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR)).build();

然后我添加(我的G Suite帐户)

.setServiceAccountUser("xxx@xxx.com.tw") 

它的回应 401未经授权 我该怎么解决!

1 个答案:

答案 0 :(得分:1)

您缺少模拟。

向服务帐户授予域范围权限的目的是使这些帐户能够代表域中的用户访问数据。

如果您授予它整个域的权限,但没有“模拟”任何帐户,则服务帐户的行为就好像您没有被授予此权限一样:它正在尝试访问自己的日历,云端硬盘文件等,或者在这种情况下,尝试插入一个事件:服务帐户cannot currently do,我想您已经知道了。

当服务帐户模拟域中的另一个用户时(也就是说,当它代表用户执行操作时),服务帐户可以访问该用户可以访问的资源。仅此而已。使委派有用的是它可以与域中的任何用户一起执行此操作。

要模拟其他用户,您必须指定该用户的电子邮件地址。我不知道您正在使用哪个库(如果有的话),但是here可以看到如何使用Python,Java和纯HTTP / REST来模拟另一个用户。如果需要在Node.js库中进行操作,请参考this answer。如果要使用其他库,请在库文档中查找相应的方法。

参考: