访问OAuthenticated用户的日历,邮件和联系人

时间:2015-06-17 00:05:55

标签: oauth exchangewebservices azure-active-directory

我在AzureAd上将应用程序配置为多租户,我选择要求Windows Azure Active Directory和Office 365 Exchange Online的所有权限。

我可以让用户授予权限,获取访问权限,刷新它们,OAuth适合我。我总是使用“common”关键字而不是租户ID,因为我的应用是多租户。

现在,我希望(CRUD)使用此令牌访问用户的邮件,通讯录和日历。这是我的问题:我完全迷失在所有可能的API端点中。我应该使用:graph.windows.net,outlook.office365.com,graph.microsoft.com? This page似乎暗示graph.microsoft.com是瑞士军刀,可以满足我的目的,但不知怎的,我找不到一个允许我找到我正在寻找的信息的文档。此外,它似乎正在开发中,可能对我想要的东西来说太不完整了。

如果我对outlook.office365.com提出疑问,我会收到401错误。

如果我将访问令牌放在this token analyzer中,虽然范围字段仅显示我在Azure Azure门户中为Windows Azure Active Directory而不是Office 365 Exchange Online设置的权限,但它看起来很健康。

我有点迷茫,欢迎任何帮助......

1 个答案:

答案 0 :(得分:3)

您可以选择:

  1. 调用单独的服务apis - 您的问题是您获得了一个令牌来呼叫AAD,然后尝试使用它来呼叫Outlook - 您需要单独调用以通过ADAL获取outlook.office365.com的令牌或直接通过令牌端点。为AAD Graph获取的令牌只能用于AAD Graph。同样,为Outlook获取的令牌只能用于Outlook API。
  2. 只是澄清一下 - Azure AD OAuth可以保护/保护多个Web API,包括O365 API,Azure AD Graph,Azure资源管理API,您自己的API和新的O365统一API。在第一个访问令牌请求中,指定您想要/需要调用的第一个资源。它不一定是AAD Graph - 即它不是默认的AFAIK。根据同意的内容,您可以使用(多资源)刷新令牌请求其他访问令牌。您在评论中链接到的Vittorio博客文章可以很好地解释这一点。

    1. 调用O365统一API(预览中)并记录IS。见下文。统一API的优点在于您只需要获取一个令牌来调用graph.microsoft.com,并且您可以使用该端点上的所有实体以及更多。它消除了#1的孤立性,以及获取和管理多个访问令牌以调用这些不同API端点的要求。但是#1目前是GA,统一API目前只是预览。
    2. 有关#2的更多信息,请参阅https://msdn.microsoft.com/en-us/office/office365/howto/office-365-unified-api-overview并在此处的示例列表中搜索“统一”:https://msdn.microsoft.com/en-us/office/office365/howto/starter-projects-and-code-samples

      我们正在努力改进统一的API文档。如果您正在进行纯REST调用,那么我建议您使用API explorer(并尝试使用https://graph.microsoft.com/beta/me/eventshttps://graph.microsoft.com/beta/me/messages来获取日历事件和邮件消息)或{{ 3}}(它可以显示JS代码片段,并允许您轻松地测试自己的代码片段)。正如您在REST示例中所看到的,要在统一API中访问邮件和日历功能,您应该能够将服务根从Outlook交换到统一API,即 - API sandbox - > https://outlook.office365.com/v1.0。在JS样本上 - 我们将在这里添加更多功能和其他样本。

      注意:outlook.office365.com中提供的个人联系人尚未在统一API中提供。

      希望这有帮助