日历中的Microsoft Graph API选择和筛选所有者地址

时间:2018-07-19 17:52:16

标签: rest api outlook office365

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

我的应用程序的权限为: enter image description here

enter image description here

enter image description here

我尝试运行以下查询:

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'

但是响应是“ ErrorInternalServerError”

enter image description here enter image description here

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

https://graph.microsoft.com/v1.0/me/calendars?$select=owner/name

谢谢

enter image description here

1 个答案:

答案 0 :(得分:1)

使用Graph访问日历需要对权限进行一些配置,然后Graph调用才能起作用。所需的内容与应用程序的类型有关,而这取决于权限的类型–委托或管理员。
以下是有助于理解和设置所需权限的信息。

开始信息:

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

Microsoft Graph permissions reference

在“ Microsoft Graph权限名称”和“日历权限”下查找

在Azure中,设置:

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

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

与REST相同:

Outlook Calendar REST API reference

请参阅“使用Calendar REST API”

代理权限:

对于代理权限,需要三件事:

Azure中的Calendar.Read.Shared或Calendar.ReadWrite.Shared。 用户还需要向日历授予共享权限。 在代码中请求的权限范围内,请求与Azure中授予的相同权限。 用户可以使用“委托”权限​​来为应用程序共享日历:

Calendar sharing in Office 365

Share an Outlook calendar with other people

管理员权限:

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

Get access without a user

其他:

How to get a list of Shared mailboxes and users with permissions to those mailboxes in Exchange Online?

请确保还阅读以下内容,其中涵盖了凭证的流动方式:

Azure Active Directory v2.0 and the OAuth 2.0 client credentials flow

权限范围信息:

Scopes, permissions, and consent in the Azure Active Directory v2.0 endpoint Permission scopes | Graph API concepts

如果所有权限设置正确
然后,您应该可以使用此查询进行一次休息呼叫:

https://graph.microsoft.com/v1.0/users/upn@domain.tld/calendars

在这里,upn @ domain.tld必须是您要查找的用户的UserPrincipalName。

请注意,您使用空格进行的任何REST查询都将失败。如果您需要使用空格调用某些内容,则需要查询字符串以%20来转义空格