通过 Microsoft Graph API 访问 Shared/Room 日历时出错
Errors accessing Shared/Room Calendars through Microsoft Graph API
我正在制作一个需要使用 non-admin 帐户访问 Office 365 实例中的 shared/room-resource 日历的应用程序。我已经使用 V2 端点和授权代码注册了一个应用程序(在 Microsoft 应用程序注册门户中)。这成功地允许我登录,并为我提供了一个具有 Calendars.ReadWrite.Shared
范围的功能令牌。使用此令牌,我可以检索我自己的日历,以及已明确与我共享的日历(因此添加到 my 日历列表)。所有这些都可以在正常的 Calendars.ReadWrite
范围内实现。
但是,我在请求访问任何其他共享日历(例如房间日历)时遇到错误。这是一个例子。如果我对 https://graph.microsoft.com/beta/users/my-own-email@business.com/calendars
进行 GET 调用,它会成功 returns 我的日历列表。如果我对 https://graph.microsoft.com/beta/users/meetingroom1.4@business.com/calendars
进行 GET 调用,我会收到 404(未找到)错误。任何其他用户都会出现同样的错误,而不仅仅是会议室。请注意,当我使用同一帐户在线登录 Office 365 时,我可以看到这些日历。
如果我要求事件而不是日历,则会出现不同的错误。如果我对 https://graph.microsoft.com/beta/users/meetingroom1.4@business.com/events
进行 GET 调用,我会收到 500(内部服务器)错误。
我已经检查了我能找到的关于这个问题的所有其他线程,这个来自 11 月的线程 How to access shared calendars from Office REST API? 说 Microsoft 端存在某种阻塞问题。它使用的是 Office REST API 而不是 Graph,但是在 back-end 上 API 调用相同的东西。这个问题还在吗?或者,我是否缺少一些进一步的权限?我尝试在 Calendars.ReadWrite.Shared
之上添加相当多的不同权限,但其中 none 修复了它。有正确的组合吗?
非常感谢您的帮助,如果有任何其他信息对诊断有用,请告诉我。
因此,如果其他人碰巧对此感兴趣,我想出了一种无需使用 Calendars.ReadWrite.Shared
权限即可访问房间资源日历的方法。这允许您仅使用 Calendars.ReadWrite
权限来访问房间资源,方法是将它们移动到您用于验证的电子邮件的日历列表中。但是,它仅适用于您与之共享日历的特定帐户,因此不适用于必须适用于任何帐户的应用程序。这对我的用例来说已经足够了,但可能不适合你。
首先,找到或创建一个帐户,该帐户是您要使用的房间资源日历的委托人,并且可以完全访问该房间资源日历。在该帐户上,单击个人资料图片下方下拉列表中的 'Open another mailbox'。
Open another mailbox location
在随后的弹出窗口中,输入您要使用的房间资源日历的电子邮件地址。
然后在打开的新页面(应该是房间资源日历的Office账号):
- 导航到日历页面
- 点击'Share'
- 与您计划用于身份验证的帐户共享默认日历。
然后登录 'authentication' 帐户,查看其电子邮件以获取共享日历的通知,然后单击 'accept'。这将做的是将日历移动到经过身份验证的帐户的日历列表中,这意味着您只需调用 https://graph.microsoft.com/v1.0/me/calendars
端点即可访问它。遗憾的是,您必须为每个想要访问的日历重复此操作。
我正在制作一个需要使用 non-admin 帐户访问 Office 365 实例中的 shared/room-resource 日历的应用程序。我已经使用 V2 端点和授权代码注册了一个应用程序(在 Microsoft 应用程序注册门户中)。这成功地允许我登录,并为我提供了一个具有 Calendars.ReadWrite.Shared
范围的功能令牌。使用此令牌,我可以检索我自己的日历,以及已明确与我共享的日历(因此添加到 my 日历列表)。所有这些都可以在正常的 Calendars.ReadWrite
范围内实现。
但是,我在请求访问任何其他共享日历(例如房间日历)时遇到错误。这是一个例子。如果我对 https://graph.microsoft.com/beta/users/my-own-email@business.com/calendars
进行 GET 调用,它会成功 returns 我的日历列表。如果我对 https://graph.microsoft.com/beta/users/meetingroom1.4@business.com/calendars
进行 GET 调用,我会收到 404(未找到)错误。任何其他用户都会出现同样的错误,而不仅仅是会议室。请注意,当我使用同一帐户在线登录 Office 365 时,我可以看到这些日历。
如果我要求事件而不是日历,则会出现不同的错误。如果我对 https://graph.microsoft.com/beta/users/meetingroom1.4@business.com/events
进行 GET 调用,我会收到 500(内部服务器)错误。
我已经检查了我能找到的关于这个问题的所有其他线程,这个来自 11 月的线程 How to access shared calendars from Office REST API? 说 Microsoft 端存在某种阻塞问题。它使用的是 Office REST API 而不是 Graph,但是在 back-end 上 API 调用相同的东西。这个问题还在吗?或者,我是否缺少一些进一步的权限?我尝试在 Calendars.ReadWrite.Shared
之上添加相当多的不同权限,但其中 none 修复了它。有正确的组合吗?
非常感谢您的帮助,如果有任何其他信息对诊断有用,请告诉我。
因此,如果其他人碰巧对此感兴趣,我想出了一种无需使用 Calendars.ReadWrite.Shared
权限即可访问房间资源日历的方法。这允许您仅使用 Calendars.ReadWrite
权限来访问房间资源,方法是将它们移动到您用于验证的电子邮件的日历列表中。但是,它仅适用于您与之共享日历的特定帐户,因此不适用于必须适用于任何帐户的应用程序。这对我的用例来说已经足够了,但可能不适合你。
首先,找到或创建一个帐户,该帐户是您要使用的房间资源日历的委托人,并且可以完全访问该房间资源日历。在该帐户上,单击个人资料图片下方下拉列表中的 'Open another mailbox'。
Open another mailbox location
在随后的弹出窗口中,输入您要使用的房间资源日历的电子邮件地址。
然后在打开的新页面(应该是房间资源日历的Office账号):
- 导航到日历页面
- 点击'Share'
- 与您计划用于身份验证的帐户共享默认日历。
然后登录 'authentication' 帐户,查看其电子邮件以获取共享日历的通知,然后单击 'accept'。这将做的是将日历移动到经过身份验证的帐户的日历列表中,这意味着您只需调用 https://graph.microsoft.com/v1.0/me/calendars
端点即可访问它。遗憾的是,您必须为每个想要访问的日历重复此操作。