asp.net-core - 使用 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_token
、access_token
和. (这似乎连接了所有访问和刷新/生命周期。)但是,所有这些令牌都占用了相当多的 cookie 空间,并在没有自定义的情况下导致来自 Kestrel 的 431 Request Header Fields Too Large 错误。 refresh_token
很明显,其目的是将访问/刷新令牌存储在服务器端的某种内存或分布式缓存中。但是,该文档似乎没有概述如何处理还包含 API 控制器的“网络应用程序”,而且似乎也没有概述如何处理一般的令牌刷新。
有没有人有更好的代码示例来说明如何配置使用 Azure AD 对用户进行身份验证的 WebApp,以及如何使用 refresh_token 正确处理刷新 id/access 令牌?
解决方案
刷新令牌由 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(和应用程序)。
推荐阅读
- janusgraph - Janusgraph:无法使用 cql 后端打开图形
- c - 多维数组的形式参数
- c++ - 我刚刚开始学习使用 C++ 的链表。我正在尝试使用向量创建一个链表。为什么这段代码有问题?
- python - Python中自恋数字检查中的意外输出
- c# - 如何防止最终用户通过 C#/.NET 中的过度发布攻击通过其主键修改对象?
- javascript - html2canvas - 错误:元素未附加到文档
- java - 如何设置 HttpClient 代理?
- java - Spring cloud Kafka 流的反序列化问题导致:java.lang.ClassCastException:ClassName 无法转换为 ClassName
- python - 如何减少此代码的内存负载?
- typescript - 我应该直接导出路由器还是作为 TypeScript NodeJS 中的类的实例?