azure-active-directory - Microsoft Graph 和自定义 API 的访问 token

标签 azure-active-directory microsoft-graph-api

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

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

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

如果我明白的话the documentation正确的是,这种类型的身份验证流程在 v2.0 中是不允许/不可能的:

However, that Web API can receive tokens only from an application that has the same Application ID. You cannot access a Web API from a client that has a different Application ID. The client won't be able to request or obtain permissions to your Web API.

从 v1.0 更改为 v2.0 的原因是我需要访问 Microsoft Graph(尤其是组)。

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

最佳答案

您不需要为此切换到 v2 端点,Microsoft Graph 同时支持 v1 和 v2 token (实际上,我能想到的支持 v2 的每个 API支持 v1,但可能有是一个异常(exception),我忘记了)。

步骤非常简单:

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

  2. 而不是传递resource=<AAD_API_ID>在您的 URI 中,使用 resource=graph.microsoft.com 。这将返回可与 Microsoft Graph 一起使用的 token 。

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

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

这是一个示例流程:

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

  2. 应用程序将授权代码发布到 /token端点(也使用您的 API 作为资源)。这将返回 access_token和一个 refresh_token到应用程序。

  3. 使用这个 access_token调用您的 API。

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

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

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

  7. 调用您的 API

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

关于azure-active-directory - Microsoft Graph 和自定义 API 的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52874064/

相关文章:

azure - 如何使用azure服务主体进行 Multi-Tenancy 应用程序?

c# - 将文件上传到 Sharepoint 在线图书馆

excel - 是否有任何 REST API 用于在 OneDrive 云中创建新的 Excel (.xlsx) 文件

c# - 无法通过C# Graph API向AD添加用户——为什么调用GraphServiceClient.Users.PostAsync()时出现 "OData Error"?

Azure AD 将用户同步到本地 AD

azure - 验证受 Azure AD 保护的 WEB API 的访问 token

azure - 如何使用 IdentityServer 4 为 Multi-Tenancy 应用程序触发 admin_consent 流程?

azure - 在 Azure Active Directory MFA 中强制执行电话号码

c# - MS图API : Set custom tags (columns) of a DriveItem

azure - 如何查询包含连字符的用户 Azure AD 属性?