MS Graph Bearer Token 能否用于访问 Office REST API?

Can an MS Graph Bearer Token be used to access the Office REST API?

我们使用 Microsoft Graph 在 .Net Core 2.0 应用程序中实现了身份验证以针对 Azure AD 进行身份验证。

效果很好,我们的目标是使用 Microsoft Graph 访问 Office 365 数据。

不幸的是,经过更深入的审查,我们发现 Tasks are currently unsupported via Microsoft Graph and must be instead accessed via the Outlook REST API

Important: APIs under the /beta version in Microsoft Graph are in preview and are subject to change. Use of these APIs in production applications is not supported.

我尝试在 Outlook REST 中传递通过 Microsoft Graph 检索到的 Bearer Token API headers 但我收到 invalid token 错误。

我希望我只是做错了什么,这是一种有效的方法。

由于 MS Graph "unified" 替代了 Outlook REST API 和其他,Microsoft Graph 令牌是否可以用于访问 Outlook REST API?

是的,这是正确的行为。令牌仅对特定 "audience" 有效,这由令牌内的 aud 声明指示。

如果您获得了 Microsoft Graph API 的令牌,则 aud 参数将设置为 https://graph.microsoft.com。这与 Office 365 API 终结点(https://outlook.office.comhttps://outlook.office365.com)不匹配,因此令牌验证失败。您在这里有两个选择。

  1. 使用 Graph 中的任务 API,即使它们处于测试阶段。
  2. 确保在请求 Graph 令牌时获得刷新令牌(通过在 auth/token 请求中包含 offline_access 范围)。然后使用该刷新令牌为适当的受众获取第二个令牌。

您可以使用刷新令牌通过在 refresh request 中限定范围来请求与 Office 365 API 兼容的令牌。例如,如果您使用 Tasks.Read 请求 Graph 令牌,您可以在刷新请求中将 Tasks.Read 限定为 https://outlook.office.com/Tasks.Read.

只想分享如何使用邮递员将 Graph RefreshToken 交换为 Outlook AccessToken。 (您可以使用您想要的任何代码语言来执行此操作)

首先让我们展示如何使用 RefreshToken 获取新的 Graph AccessToken:

然后使用Graph RefreshToken获取新的Outlook AccessToken:

希望这可能对其他人有所帮助 :)