使用Google Calendar API和服务帐户创建事件

问题描述 投票:0回答:1

因此,我已按照本文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凭证。不使用任何模拟,并且日历与服务帐户共享。

java google-api google-calendar-api google-api-java-client gsuite
1个回答
0
投票

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

如果要授予服务帐户访问另一个日历的权限,则有两种方法。

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

  2. 如果您有gsuite帐户,则可以使用域范围内的委派,这将允许服务帐户模拟其他用户,然后在服务帐户创建事件时,事件将由该用户创建。

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

© www.soinside.com 2019 - 2024. All rights reserved.