我试图在Java中通过一个简单的POST调用来检索我自己的忙/闲日历,但我遇到了访问错误。基本上,我得到了一个404,notFound错误,如下所示:
{
"kind": "calendar#freeBusy",
"timeMin": "2019-05-28T13:00:00.000Z",
"timeMax": "2019-05-28T21:00:00.000Z",
"calendars": {
"me@mycompany.com": {
"errors": [
{
"domain": "global",
"reason": "notFound"
}
],
"busy": []
}
}
}
代码相当简单。如果我使用OAuth游乐场的持有者令牌,我可以得到我需要的东西,一切都很好。下面是我的相关代码:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(Objects.requireNonNull(classLoader.getResource("...a59.json")).getFile());
GoogleCredential credential = GoogleCredential
.fromStream(new FileInputStream(file))
.createScoped(CalendarScopes.all());
credential.refreshToken();
String accessToken = credential.getAccessToken();
我得到的accessToken
值产生了上面的响应。
对于我的服务帐户,我已经在一个启用了Calendar API的项目中创建了它。我还授予它Project Owner
的角色,这样它就可以完全访问项目中的设置。
我确信这是我的服务帐户配置中的一些小而简单的东西,但我无论如何也搞不清楚它是什么。
发布于 2019-06-13 03:42:14
所以我自己想办法解决了这个问题。似乎我的服务帐户设置正确,但我添加的权限设置不正确。郑重声明,这是我想要的:
我已经创建了服务帐户,确保它具有域范围委派授权,将Calendar和Admin API添加到拥有该服务帐户的项目中,但如果不根据上面@Alex Baban的消息将我的服务帐户添加到日历中,我将无法使其工作。
我从头开始,因为将这个添加到几十个帐户并不是一个理想的解决方案,然后我找到了它。我必须为我的服务帐户添加以下授权:
希望这能在未来帮助其他人。
发布于 2019-05-31 03:08:07
你还需要再走一步。
您需要与您的服务帐户共享日历。
使用文本编辑器打开您在创建服务帐户时下载的something-something.json
文件,您将发现所需的电子邮件地址作为"client_email“键/值对的值。
转到您的日历“设置和共享”,然后单击"+添加人员“按钮,您可以在”与特定人员共享“下找到该按钮。
您可能已经这样做了,但对于其他人,这里是使用服务帐户访问Google Calendar的完整过程:(allow my user to add meeting in my calendar with Google Calendar API with PHP without auth)
https://stackoverflow.com/questions/56383653
复制相似问题