首页 > 解决方案 > 使用 Microsoft.Identity.Web 对 WebApp+API 的用户进行身份验证,以及如何管理生命周期

问题描述

我正在尝试创建一个使用多租户 Azure AD 进行身份验证和授权的 webapp。我正在尝试使用 Microsoft.Identity.Web 来关注文档,但这些片段并没有为我点击。

我已经能够成功地创建一个网络应用程序,用户可以在其中登录、重定向回我的网站,并id_token保存到他们的浏览器 cookie,以便网络应用程序能够知道他们是谁。但是,我的 Web 应用程序本身包含 API,我不清楚我们应该如何获取一个access_token以及通过 来管理生命周期refresh_tokens,以便在 Web 应用程序本身上调用 API。实际上,Microsoft.Identity.Web 的文档中似乎根本没有涉及刷新。

除了专用的 SDK,我还尝试使用AddCookie()+ AddOpenIdConnect()(更通用的解决方案)。使用这些中间件选项,我成功地获得了id_tokenaccess_token和. (这似乎连接了所有访问和刷新/生命周期。)但是,所有这些令牌都占用了相当多的 cookie 空间,并在没有自定义的情况下导致来自 Kestrel 的 431 Request Header Fields Too Large 错误。 refresh_token

很明显,其目的是将访问/刷新令牌存储在服务器端的某种内存或分布式缓存中。但是,该文档似乎没有概述如何处理还包含 API 控制器的“网络应用程序”,而且似乎也没有概述如何处理一般的令牌刷新。

有没有人有更好的代码示例来说明如何配置使用 Azure AD 对用户进行身份验证的 WebApp,以及如何使用 refresh_token 正确处理刷新 id/access 令牌?

标签: asp.net-coreazure-active-directorymsal

解决方案


刷新令牌由 Microsoft.Identity.Web 使用的 MSAL.NET 自动处理。

我们建议您查看以下示例:https ://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/4-WebApp-your-API/4-3 -AnyOrg,但您的 Web 应用程序和 Web API 将具有相同的 clientID(和应用程序)。

另请查看https://github.com/AzureAD/microsoft-identity-web/wiki/Mixing-web-app-and-web-api-in-the-same-ASP.NET-core-app


推荐阅读