Azure AD 在 Web API 中使用来自客户端应用程序的令牌
Posted
技术标签:
【中文标题】Azure AD 在 Web API 中使用来自客户端应用程序的令牌【英文标题】:Azure AD using token from client application in Web API 【发布时间】:2020-03-28 04:17:45 【问题描述】:我有以下设置: 2 个客户端应用程序(Xamarin Forms 和 WPF)和一个 Web API(.NET Core 2.0)。 客户端应用程序使用 MSAL 库对 Azure AD(单租户应用程序)进行身份验证。 客户端应用程序通过身份验证后,它们可以使用其身份验证令牌调用 Web API。
Web API 应该验证这个令牌(控制器中的[Authorize]
)如果它是有效的并且知道什么用户正在调用 API。
验证客户端没有问题,使用AcquireTokenInteractive
和AcquireTokenSilent
方法非常容易。
调用 Web API 时(使用HttpClient
,我们在标头中添加标记:client.DefaultRequestHeaders.Add("Bearer", token);
。
Startup.cs
类中的 Web API(删除了所有测试代码)配置如下(我知道这还不够):
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
这是您在创建配置了 Azure AD 的新项目时获得的模板。
在 Azure AD 门户中,我们配置了应用程序,并且在客户端应用程序和 Web API 上配置了 ID(TentantId、ClientId/ApplicationId)。
我们已经对 On-Behalf-Of 流程进行了研究,但我不确定这是否是我们需要的流程。
应用程序注册为Single tentant
应用程序,如果将Suggested Redirect Uri
设置为msal[UNIQUE_ID_I_REMOVED_FOR_SECURITY]://auth
,则应将其设置为https://login.microsoftonline.com/common/oauth2/nativeclient
我们没有使用 Azure AD 流程的经验,需要一些帮助。如果有人能通过链接、文档、示例代码为我指明正确的方向,将不胜感激。
感谢您的帮助。
【问题讨论】:
【参考方案1】:This sample 展示了如何使用 V1 端点或 this one(如果使用 V2 端点)从 WPF 应用程序调用核心 API。 API 需要知道 1) 谁发布了令牌(授权),以便它可以获取其发行者名称和签名密钥 2) 其受众 ID,以便它可以验证传入令牌的受众是否适合它(通常是 guid 或 uri)。只有当您的 API 需要代表原始用户调用另一个 API 时,OBO 流程才会与您相关:该流程允许您将您收到的令牌 (API1) 交换为另一个 API (API2) 保留有关信息的令牌原始用户。
【讨论】:
谢谢。我将进一步研究这些示例并接受您的回答作为解决方案。快速查看样本应该足以解决问题。以上是关于Azure AD 在 Web API 中使用来自客户端应用程序的令牌的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob
使用用户模拟来调用Azure AD Microsoft API的Web API
使用 azure AD B2C 进行 blazor web api 身份验证