【问题标题】:Can an MS Graph Bearer Token be used to access the Office REST API?能否使用 MS Graph Bearer 令牌访问 Office REST API?
【发布时间】:2018-01-30 16:02:58
【问题描述】:

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

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

不幸的是,经过深入审查,我们发现Tasks are currently unsupported via Microsoft Graph 必须通过Outlook REST API 访问。

重要提示:Microsoft Graph 中 /beta 版本下的 API 处于预览阶段,可能会发生变化。不支持在生产应用程序中使用这些 API。

我尝试在 Outlook REST API 标头中传递通过 Microsoft Graph 检索到的不记名令牌,但我收到了 invalid token 错误。

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

由于 MS Graph 是 Outlook REST API 和其他 API 的“统一”替代品,是否可以使用 Microsoft Graph 令牌来访问 Outlook REST API?

【问题讨论】:

  • 这是一个好点,不幸的是它在顶部也有这个警告:“重要:Microsoft Graph 中 /beta 版本下的 API 处于预览状态,可能会发生变化。在生产中使用这些 API不支持应用程序。”。感谢您指出这一点,我会将其添加到问题中作为先前的研究。
  • 一个注释供将来参考,您获得的令牌不是来自 Microsoft Graph,而是直接来自 Azure AD。 Microsoft Graph 只是您为其请求令牌的受众/资源。次要细节,但理解 Token 和 API 之间的关注点分离将有助于后续调试。

标签: microsoft-graph-api outlook-restapi


【解决方案1】:

是的,这是正确的行为。令牌仅对特定的“受众”有效,这由令牌内的 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 范围)。然后使用该刷新令牌获取具有适当受众的第二个令牌。

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

【讨论】:

  • 非常感谢您的回答。这是关于正在发生的事情的很多非常有用的细节,我现在对它有了更好的理解。由于这将进入生产应用程序,因此由于警告,我对使用 Tasks API 感到不舒服。但同时请求第二个令牌似乎是一个非常有前途的选择!明天我将尝试实施,如果成功则接受。
  • 这似乎工作得很好,谢谢。我现在在初始身份验证后检索两个令牌并将它们缓存以供其他地方使用。 var outlookResult = await outlookCCA.AcquireTokenByAuthorizationCodeAsync(code, outlookScopes); var graphResult = await graphCCA.AcquireTokenByAuthorizationCodeAsync(code, graphScopes);
【解决方案2】:

只想分享如何使用邮递员将 Graph RefreshToken 交换为 Outlook AccessToken。 (你可以用任何你想要的代码语言来做到这一点)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2017-06-25
    • 2019-07-16
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多