Google calendar api Google Admin SDK:401未经授权使用.setServiceAccountUser()
所以我想了解一下这个问题的背景。我有一个本地应用程序,它同时使用谷歌日历api和谷歌管理sdk来管理用户日历和资源日历 以下是我在设置中采取的步骤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
- 已创建服务帐户并授予其全域访问权限
- 在开发人员控制台中添加并启用了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()