Microsoft Graph 和自定义 API 的访问令牌

Posted

技术标签:

【中文标题】Microsoft Graph 和自定义 API 的访问令牌【英文标题】:Access Token for both Microsoft Graph and Custom API 【发布时间】:2019-03-23 06:22:14 【问题描述】:

我有一个 ReactJs 前端向 API 发出请求。两者都托管在 Azure 中,并在 AAD 中注册应用程序。

我曾经能够使用 v1.0 身份验证端点,并为 API 创建一个有效的令牌:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=<AAD_WEB_APP_ID>&resource=<AAD_API_ID>&response_type=token ...

如果我对 the documentation 的理解正确,则在 v2.0 中不允许/不可能使用这种类型的身份验证流程:

但是,该 Web API 只能从具有相同应用程序 ID 的应用程序接收令牌。您不能从具有不同应用程序 ID 的客户端访问 Web API。客户端将无法请求或获取对您的 Web API 的权限。

从 v1.0 更改为 v2.0 的原因是我需要访问 Microsoft Graph(特别是Groups)。

我的问题是:如何创建适用于 Microsoft Graph 和我的 API 的 access_token?如果这不可能,那么正确的身份验证流程是什么?

【问题讨论】:

他们有 Angular 的示例,但这也可能适用于您***.com/a/52792574/639153 【参考方案1】:

您不需要为此切换到 v2 端点,Microsoft Graph 支持 v1 和 v2 令牌(实际上,我能想到的每个支持 v2 的 API 都支持 v1 但可能是我忘记的例外)。

步骤非常简单:

    在 Azure 门户中更新您的 AAD 注册并添加您将要使用的 Microsoft Graph 的权限。

    不要在 URI 中传递 resource=&lt;AAD_API_ID&gt;,而是使用 resource=graph.microsoft.com。这将返回一个可用于 Microsoft Graph 的令牌。

重要提示:必须请求离线访问范围 (offline_access) 才能使其正常工作。

令人困惑的地方在于,技术上您不能使用相同的访问令牌来访问您的 API 和 Microsoft Graph。 支持的是在刷新令牌时切换Resource。因此,是的,虽然您正在使用两个不同的令牌,但您正在重用相同的凭据/授权代码。

这是一个示例流程:

    用户使用您的 API 作为资源 (resource=&lt;AAD_API_ID&gt;) 进行身份验证。这会将授权代码返回给您的应用程序。

    应用程序将授权代码发布到 /token 端点(也使用您的 API 作为资源)。这会将access_tokenrefresh_token 返回给应用程序。

    使用此 access_token 调用您的 API。

    应用程序使用graph.microsoft.com 作为资源将refresh_token 发布到/token 端点。这将返回一个新的 access_tokenrefresh_token 键控到 Microsoft Graph。

    使用这个新的access_token 调用 Microsoft Graph。

    应用程序再次将 refresh_token 发布到 /token 端点,但这次再次使用您的 API 作为资源。这将返回一个新的access_tokenrefresh_token 键入您的API。

    调用您的 API

您可以根据需要重复此循环。根据您需要切换的频率,您还可以将 API 和 Graph 的访问令牌保留在内存中,并重复使用它们直到它们过期。请确保并始终存储您收到的最后一个刷新令牌,以便您可以根据需要获取任一资源的刷新令牌。

【讨论】:

感谢您抽出宝贵时间回答。我不知道是否有正确的方法,似乎这是这样做的方法。再次感谢 @Carl-Johan Beurling,您的解决方案 URL 是什么样的?

以上是关于Microsoft Graph 和自定义 API 的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Graph API应用程序注册问题

使用 microsoft graph API 创建事件时设置自己的事件 ID

MS Graph API:microsoft.graph.createLink 未创建匿名视图链接

Azure Developer使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

使用 microsoft graph api 检出 onedrive 文件的状态

获取 Microsoft Graph API 的有效访问令牌