403通过OAuth 2.0使用服务帐户调用v3 Google Calendar API时的禁止消息

Jus*_*ips 9 google-calendar-api http-status-code-403 oauth-2.0

这是我的帖子中关于使用Google Calendar API和OAuth2时出现401错误的信息,可以在此处找到

这包含导致我下一个问题的帐户设置的详细信息,因此我不会在此主题中重复自己.

好的,所以当我调用以下代码来更新Calendar事件时,我得到403禁止错误.

for (Event event : events.getItems())
{
    event.setSummary("XXX" + event.getSummary());

    Event updatedEvent = calendar.events().update(CALENDAR_ID, event.getId(), event).execute();
}
Run Code Online (Sandbox Code Playgroud)

这是返回的错误消息:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
    "code" : 403,
    "errors" : [ {
        "message" : "Forbidden"
     } ],
    "message" : "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

我试过了什么?好吧,我已经重新阅读了关于服务帐户的(相当差的)Google文档,重新检查了我的API控制台帐户设置,尝试更改构建凭据的代码(这会导致其他错误,因此在我之前的帖子中是回归) .

简而言之,没有任何作用,那么我有什么明显的遗漏吗?

Jus*_*ips 25

解决了,感谢这篇文章.

您必须使用Google API控制台中生成的服务帐户电子邮件与Google日历帐户共享日历,例如284XXXXXXXX@developer.gserviceaccount.com.

我现在可以从我的网络服务更新我的日历.

  • 我也有同样的问题.解决方案是:1)检查您为Calendar.Builder()设置的所有凭据.2)与您的服务帐户共享日历,并确保在"权限设置"中选择"更改事件". (2认同)

Mad*_*dhu 5

即使在分享日历之后,我也得到了同样的错误,就像贾斯汀的回答一样.在与另一个工作样本进行比较后发现我已经设定了

var SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"];
Run Code Online (Sandbox Code Playgroud)

代替

var SCOPES = ["https://www.googleapis.com/auth/calendar"];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助那些犯了类似错误并且出现此错误的人.