当我试图在用户的日历上创建订阅时,为什么会从图形api得到一个禁止的响应?

问题描述 投票:2回答:1

我的应用程序使用委托用户访问令牌与MSFT图形API交互。他们有 Calendars.ReadWrite.Shared 允许。当向 https:/graph.microsoft.comv1.0订阅。 在生产中,请求体如下。

{
     "changeType": "created,updated,deleted",
     "notificationUrl": <https_app_notification_url>,
     "resource": "/me/calendars/<calendar_id>/events",
     "expirationDateTime": (datetime.now(timezone.utc) + timedelta(minutes=4200)).isoformat(),
     "clientState": <a_crypto_random_string>
}

几乎每次响应都是一个错误,在响应体中包含以下内容。

[Status Code: Forbidden; Reason: Access is denied. Check credentials and try again.]

最近一次出现的错误有以下内容: 1. innerError 的响应中。

{'date': '2020-05-13T20:58:09', 'request-id': '1448e490-9e45-4a08-9aab-dd9c996c18db'}

即使在尝试订阅用户自己的默认日历时也会发生这种情况。

奇怪的是,完全相同的代码,当在我的本地机器上运行,并通过ngrok隧道到web上暴露我的应用程序的notificationUrl端点时,能够始终如一地从MSFT的订阅端点得到一个201。

我已经检查了服务器上的系统时间与 date 命令,而我的本地机器和服务器之间相差不到1秒。所以我不认为 expirationDateTime 字段是问题所在;它有30分钟的缓冲时间,因为我相信最大的缓冲时间是根据。文献 是4230。

我应该在oauth作用域中为用户访问令牌申请额外的权限吗?文档中 据说 Calendars.Read 够了 Calendars.ReadWrite.Shared 会做到这一点。还是我还遗漏了什么?

microsoft-graph microsoft-graph-calendar
1个回答
0
投票

你需要 Calendars.Read 中所概述的 文件 来订阅当前用户的日历。

© www.soinside.com 2019 - 2024. All rights reserved.