使用 Google 日历 API 和服务帐户创建活动

Creating events using the Google Calendar API and Service Account

因此,我已按照 post Perform G Suite Domain-Wide Delegation of Authorit 中的描述设置了我的服务帐户与域范围的授权。在 G Suite 管理控制台中,我已授权服务帐户使用 OAuth 2.0 范围:

https://www.googleapis.com/auth/calendar. 

每次我尝试创建一个事件时,我都会遇到这个错误

GoogleJsonResponseException: 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."
}
new GoogleCredential.Builder()
      .setTransport(HTTP_TRANSPORT)
      .setJsonFactory(JSON_FACTORY)
      .setServiceAccountId(json.get("client_id").getAsString)
      .setServiceAccountPrivateKeyId(json.get("private_key_id").getAsString)
      .setServiceAccountPrivateKey(getPrivateKeyFromPkcs8(jsonCreds.get("private_key").getAsString))
      .setServiceAccountScopes(SCOPES)
      .build()

此构建 google 凭据。未使用模拟,日历与服务帐户共享。

服务帐户是他们自己的用户。他们有自己的 Google 日历帐户。

如果您想授予服务帐户访问另一个日历的权限,有两种方法可以做到这一点。

  1. 您可以与服务帐户共享日历,这样它就可以像任何其他用户一样访问日历。创建事件时,它们将由服务帐户创建。

  2. 如果您有一个 gsuite 帐户,那么您可以使用域范围的委托,这将允许服务帐户模拟另一个用户,然后当服务帐户创建事件时,该事件将由该用户创建用户.

我希望这有助于为您解决一些问题。

在 2020 年 3 月 2 日之后联系的 G Suite 支持人员和任何服务帐户将无法在不使用模拟的情况下邀请客人参加活动。