java - 使用 Google Calendar API 和服务帐户创建 Activity

标签 java google-api google-calendar-api google-api-java-client google-workspace

因此,我已经按照本文 Perform G Suite Domain-Wide Delegation of Authorit 中所述设置了具有域范围委托(delegate)的服务帐户。 。在 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 日历帐户。

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

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

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

我希望这有助于您理清思路。

关于java - 使用 Google Calendar API 和服务帐户创建 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61473708/

相关文章:

java - 如何访问 Google Apps for Business 用户的日历空闲/忙碌信息?

iphone - 有适用于 iphone sdk 的谷歌日历 api 吗?

java - 使用PreparedStatement时出现IndexOutOfBounds

java - RAD/Eclipse Eclipse 测试和性能工具平台,将数据导出到文本文件

java - 使用 Google People API (Java) 检索有关联系人的信息

java - Google Sheet API 多范围解析

php - Laravel 社交名流 Google 登录在本地环境中失败并出现 401

java - Swing - 创建有色透明前景,同时使背景项目不可点击

java - 如何比较 Null 实体而不引发 NullPointerException

jquery - 谷歌日历 CORS 错误