Google calendar api Google Admin SDK:401未经授权使用.setServiceAccountUser()

Google calendar api Google Admin SDK:401未经授权使用.setServiceAccountUser(),google-calendar-api,google-admin-sdk,service-accounts,google-developers-console,google-workspace,Google Calendar Api,Google Admin Sdk,Service Accounts,Google Developers Console,Google Workspace,所以我想了解一下这个问题的背景。我有一个本地应用程序,它同时使用谷歌日历api和谷歌管理sdk来管理用户日历和资源日历 以下是我在设置中采取的步骤 已创建服务帐户并授予其全域访问权限 在开发人员控制台中添加并启用了Google日历Api和Admin SDK 将客户端id和作用域添加到Gsuit管理控制台的Manage API client access部分 我在这里构建凭据(出于测试目的,我将它们存储在本地json文件中) 我遇到的第一个问题是,如果我删除该行 .setServiceAcc

所以我想了解一下这个问题的背景。我有一个本地应用程序,它同时使用谷歌日历api和谷歌管理sdk来管理用户日历和资源日历

以下是我在设置中采取的步骤

  • 已创建服务帐户并授予其全域访问权限
  • 在开发人员控制台中添加并启用了Google日历Api和Admin SDK
  • 将客户端id和作用域添加到Gsuit管理控制台的Manage API client access部分

我在这里构建凭据(出于测试目的,我将它们存储在本地json文件中)

我遇到的第一个问题是,如果我删除该行

.setServiceAccountUser(USER)
然后cred.refreshToken()==true然而,当我尝试获取我的客户的资源列表时,会出现此错误

404 Not Found
{
  "code" : 404,
  "errors" : [ {
    "domain" : "global",
    "message" : "Domain not found.",
    "reason" : "notFound"
  } ],
  "message" : "Domain not found."
}
com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
如果我模拟一个用户,我会得到这个错误,它是由cred.refreshtToken()引起的。

我理解,为了操作管理SDK,您必须模拟具有管理凭据的用户,但是即使我这样做,我也会得到相同的结果


连接到AdminSDK的客户端是在这些行中构建的

def getClientAsUser(user:String):Directory={
    new Directory.Builder(HTTP_TRANSPORT, JSON_FACTORY, testCredJsonAsTestUser(user))
      .setApplicationName(APPLICATION_NAME)
      .build()
}
对AdminSDK的最后一个调用在以下行中执行

var client = getClientAsUser(admin@domain.com)
var calendarList = client.resources().calendars().list("my_customer").execute()

任何帮助都将不胜感激

请尝试模拟一个可以访问目录API的管理员。根据报告:

只有具有管理API访问权限的用户才能访问管理SDK目录API,因此您的服务帐户需要模拟其中一个用户才能访问管理SDK目录API

此外,检查这些相关的SO post-and。第一篇相关的SO帖子声明访问日历资源需要超级管理员,第二篇帖子声明TokenResponseException:401 Unauthorized在拥有无效的客户端ID、客户端机密或作用域时发生。但这也可能是由于刷新令牌的过度使用


希望这有帮助。

尝试模拟一个可以访问目录API的管理员。根据报告:

只有具有管理API访问权限的用户才能访问管理SDK目录API,因此您的服务帐户需要模拟其中一个用户才能访问管理SDK目录API

此外,检查这些相关的SO post-and。第一篇相关的SO帖子声明访问日历资源需要超级管理员,第二篇帖子声明TokenResponseException:401 Unauthorized在拥有无效的客户端ID、客户端机密或作用域时发生。但这也可能是由于刷新令牌的过度使用

希望这有帮助

def getClientAsUser(user:String):Directory={
    new Directory.Builder(HTTP_TRANSPORT, JSON_FACTORY, testCredJsonAsTestUser(user))
      .setApplicationName(APPLICATION_NAME)
      .build()
}
var client = getClientAsUser(admin@domain.com)
var calendarList = client.resources().calendars().list("my_customer").execute()