Microsoft Graph API选择并过滤日历中的所有者地址

Edu*_*ros 7 api rest outlook office365

我正在尝试使用Microsoft Graph Api来获取和过滤地址所有者以及日历的地址名称.

我的应用的权限是: 在此输入图像描述

在此输入图像描述

在此输入图像描述

我尝试运行此查询:

https://graph.microsoft.com/v1.0/me/calendars?$filter=owner/name eq 'Megan Bowen'

https://graph.microsoft.com/v1.0/me/calendars?$filter=owner/address eq 'noreply@Planner.Office365.com'
Run Code Online (Sandbox Code Playgroud)

但响应是"ErrorInternalServerError"

在此输入图像描述 在此输入图像描述

为什么这个查询有问题?如何选择特定类型的属性?

https://graph.microsoft.com/v1.0/me/calendars?$select=owner/name
Run Code Online (Sandbox Code Playgroud)

谢谢,

在此输入图像描述

Hen*_*sen 1

使用 Graph 访问日历需要在 Graph 调用起作用之前进行一些权限配置。所需内容与应用程序类型以及驱动权限类型 \xe2\x80\x93 代表或管理员相关。
\n以下信息可帮助理解和帮助设置所需的权限。

\n\n

起始信息:

\n\n

为了使 Graph 从共享邮箱中读取数据(类似于 Outlook 委托访问),您需要在 Azure 中设置权限,并且可能还需要设置共享权限。如果您设置 Calendars.Read.Shared 权限,则用户将需要共享其日历。如果您为应用程序设置 Calendars.Read,则它可以访问组织 \xe2\x80\x93 中的所有日历,无法过滤范围。

\n\n

Microsoft Graph 权限参考

\n\n

查看“Microsoft Graph 权限名称”和“日历权限”

\n\n

在 Azure 中,设置:

\n\n

Calendars.Read.Shared 权限:允许应用读取用户可以访问的所有日历中的事件,包括委托日历和共享日历。(委托权限)

\n\n

或者

\n\n

Calendars.Read:允许应用在没有登录用户的情况下读取所有日历的事件。(申请权限)

\n\n

REST 也是一样的:

\n\n

Outlook 日历 REST API 参考

\n\n

请参阅“使用日历 REST API”

\n\n

委托权限:

\n\n

对于委托权限,需要三件事:

\n\n

Azure 中的 Calendar.Read.Shared 或 Calendar.ReadWrite.Shared。\n用户还需要向日历授予共享权限。\n在代码中请求的权限范围内,请求您在 Azure 中授予的相同权限。\n此处用户如何使用委托权限共享应用程序的日历:

\n\n

Office 365 中的日历共享

\n\n

与其他人共享 Outlook 日历

\n\n

管理员权限:

\n\n

对于管理员权限(由后台服务或守护程序应用程序使用),需要为 Calendar.Read 或 Calendar.ReadWrite 授予管理员同意。这将允许应用程序访问组织中的所有邮箱。这些权限不能过滤到除所有邮箱以外的任何内容。

\n\n

无需用户即可访问

\n\n

额外的:

\n\n

如何获取 Exchange Online 中的共享邮箱以及有权访问这些邮箱的用户的列表?

\n\n

请务必阅读以下内容,其中介绍了凭证的流程:

\n\n

Azure Active Directory v2.0 和 OAuth 2.0 客户端凭据流程

\n\n

权限范围信息:

\n\n

Azure Active Directory v2.0 终结点中的范围、权限和同意\n权限范围 | 图 API 概念

\n\n

如果所有权限设置正确
\n那么您应该能够使用此查询进行休息调用:

\n\n
https://graph.microsoft.com/v1.0/users/upn@domain.tld/calendars\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里的 upn@domain.tld 需要是您要查找的用户的 UserPrincipalName。

\n\n

附带说明一下,任何包含空格的 REST 查询都会失败。如果你需要调用带有空格的东西,你需要查询字符串用 %20 转义空格

\n

  • 关于“如果您为应用程序设置 Calendars.Read,那么它可以访问组织中的所有日历 - 无法过滤范围。” 以下内容可能会有所帮助 https://learn.microsoft.com/en-us/graph/auth-limit-mailbox-access (2认同)