【问题标题】:Get free/busy information without authorizing full read permissions无需授权完全读取权限即可获取忙/闲信息
【发布时间】:2023-04-10 04:08:02
【问题描述】:

我希望访问多个 Microsoft Outlook 用户(在同一租户中)的忙/闲信息,以便为他们安排一些活动。

对此,我有几种可能:

我的问题是所有这些都需要Calendars.ReadCalendars.Read.Shared 权限。我已经测试了解决方案 2(因为我更喜欢应用程序权限),但是在列出事件时,我会收到这些事件的所有信息,并且可能还会看到附件,这是权限太宽了。

因此,我的问题如下:如何在多个用户之间找到空闲时间,然后向他们发送 Microsoft Outlook 日历邀请,而无需授予过宽的权限?

其他问题:我目前正在测试使用 Calendars.Read.Shared 获取共享事件。我的第一个用户通过了 OAuth 流程并授予了我的应用程序的权限。另一个用户与该用户共享他们的日历(仅限可用性)。但是,当尝试获取事件时(端点:https://graph.microsoft.com/v1.0/users/{user_B_Graph_ID}/events 我收到“403 - DelegatedCalendarAccessDenied”错误。有人遇到过这种情况吗?

Here is a documentation file for what I am trying to do.

【问题讨论】:

    标签: microsoft-graph-api microsoft-graph-calendar


    【解决方案1】:

    应用程序权限范围在设计上非常广泛,它确实是一个“全有或全无”的场景。如果您使用 Calendar.Read 应用程序范围,那么您的应用程序将对租户中的每个日历具有只读访问权限。无法限制它可以访问哪些日历或哪些数据。

    /findMeetingTimes 端点不支持应用程序范围(它使用Calendars.Read.Shared 委托范围),它可能最接近您正在寻找的内容。

    /findMeetingTimes 工作流程比/getSchedule 使用起来要麻烦一些,但由于/getSchedule 仍处于测试阶段,因此您不应在生产应用程序中使用它。拉取对任何 /beta API 的依赖项是不安全的,它们可能并且很可能会不时地失败。

    【讨论】:

    • 问题是我们的客户也不喜欢授予我们阅读活动描述、与会者和附件的权利的想法。目前我正在建议一个相当接近的解决方案。将 /findMeetingTimes 与 Calendars.Read.Shared 与我们应用程序的用户帐户一起使用,默认情况下,该应用程序应该与它共享所有其他租户日历,但只有可用性。这是我想到的唯一解决方法,而不必依赖完整的日历读取访问权限。很高兴听到您的想法。
    【解决方案2】:

    适用于将来遇到相同问题的任何人。您可以通过配置应用程序访问策略来缩小 Calendar.Read 权限范围:

    管理员可以配置应用访问策略来限制应用 访问特定邮箱而不是访问所有邮箱 组织,即使应用程序已被授予应用程序 Calendars.Read 或 Calendars.ReadWrite 的权限。

    https://docs.microsoft.com/en-us/graph/permissions-reference#calendars-permissions

    【讨论】:

    • 主要问题是范围不够细化,例如使用委托或应用权限,如果没有对所有事件的完全读取权限,我将无法创建事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2020-11-05
    • 2015-12-26
    • 2023-03-21
    • 2012-08-27
    相关资源
    最近更新 更多