我正在创建一个需要使用非管理员帐户访问Office 365实例中的共享/会议室资源日历的应用程序。我使用V2端点和Auth Code Grant注册了一个应用程序(在Microsoft应用程序注册门户中)。这成功地允许我登录,并为我提供具有Calendars.ReadWrite.Shared
范围的功能令牌。使用此令牌,我可以检索自己的日历和已与我明确共享的日历(因此添加到我的日历列表中)。所有这一切都只适用于普通的Calendars.ReadWrite
范围。
但是,在请求访问任何其他共享日历(例如房间日历)时,我会收到错误。这是一个例子。如果我对https://graph.microsoft.com/beta/users/my-own-email@business.com/calendars
进行GET调用,它会成功返回我的日历列表。如果我对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?,说明微软已经出现了某种阻塞问题。它使用Office REST API而不是Graph,但在后端API调用相同的东西。这个问题仍然存在吗?或者,我是否缺少一些进一步的权限?我尝试在Calendars.ReadWrite.Shared
之上添加了很多不同的权限,但没有一个修复它。有正确的组合吗?
非常感谢您的帮助,如果有任何其他信息对诊断有用,请告诉我。
答案 0 :(得分:0)
因此,如果其他人碰巧对此感兴趣,我想出了一种方法来访问房间资源日历而不使用Calendars.ReadWrite.Shared
权限。这样,您只需使用Calendars.ReadWrite
权限即可访问会议室资源,方法是将其移动到您要通过身份验证的电子邮件的日历列表中。但是,它仅适用于您与之共享日历的特定帐户,因此无法在必须为任何帐户使用的应用中使用。这对我的用例来说已经足够了,但可能不适合你的用途。
首先,查找或创建一个帐户,该帐户是您要使用的会议室资源日历的代表,并且具有完全访问权限。在该帐户上,单击您的个人资料图片下方的下拉列表中的“打开另一个邮箱”。
在随后的弹出窗口中,输入您要使用的会议室资源日历的电子邮件地址。
然后,在打开的新页面上(应该是会议室资源日历的Office帐户):
然后登录该“身份验证”帐户,检查其电子邮件以获取共享日历的通知,然后点击“接受”。这样做是将日历移动到经过身份验证的帐户的日历列表中,这意味着只需调用https://graph.microsoft.com/v1.0/me/calendars
端点即可访问日历。遗憾的是,你必须为你希望能够访问的每个日历重复它。