ASP.NET 8中对认证和身份的改进
原文信息
文章:Improvements to auth and identity in ASP.NET Core 8
作者:Jeremy Likness((.NET首席项目经理)
链接:https://devblogs.microsoft.com/dotnet/author/jeremy-likness
发布时间:2023年4月4日
ASP.NET Core团队正在改进 .NET 8 中的身份验证、授权和标识管理(统称为“身份验证”)。新的 API 将使自定义用户登录和身份管理体验变得更加容易。新终结点将在单页应用程序 (SPA) 中启用基于令牌的身份验证和授权,无需外部依赖项。我们还将改进我们的指南和文档,以便更轻松地发现和实施身份管理解决方案。
# 背景
在 ASP.NET Core 应用程序中启用身份验证的开发人员面临着多种选择:
- ASP.NET Core 提供内置的 ASP.NET Core 标识 (opens new window) 解决方案来管理客户登录和授权。
- Azure Active Directory (Azure AD) (opens new window) 是 Azure 云托管的解决方案,可提供精细的访问控制并支持高级方案,例如“通过应用代表用户”为 API 授权资源。
- 各种第三方解决方案以包、容器和云服务的形式提供。
ASP.NET Core身份是我们独立的开箱即用解决方案。它包括:
- 提供用于处理用户(包括声明和登录名)和角色的 API 的标识管理器。
- 用于持久保存身份信息(用户、声明、登录提供程序和角色)的身份存储接口。
- 关系数据库的身份存储的默认实现。您可以选择创建自己的身份存储自定义实现。
- 与 ASP.NET Core的身份验证系统(SignInManager)集成。
- 用于用户管理的 UI(标识 UI)。
目前,在 SPA 应用中使用 ASP.NET Core标识存在限制。自定义标识相关页面的传统方法会强制应用还原为服务器呈现的网页。我们依靠外部(第三方)包来支持基于令牌的身份验证。
我们已听取你的反馈,并正在制定解决方案,以支持更多开箱即用的方案,无需外部依赖项。这使您可以灵活地立即开始使用解决方案,同时保持选择其他选项的自由。我们最近在 GitHub 上分享了我们的身份验证计划 (opens new window),获得了压倒性的正面反馈,并感谢有机会与这样一个支持和参与的社区合作。
# 身份服务器和 SPA 模板
为了解决客户反馈、其他选项的可用性并尽可能简化,我们计划从 .NET 8 中的 SPA 模板中删除对 Duende 标识服务器的依赖。
对于上下文,我们开始发布 IdentityServer4 以支持单页应用程序 (SPA) 中的 JSON Web 令牌 (JWT) 安全性,作为 .NET Core 3.1 中 Angular、React 和 Blazor WebAssembly 模板的一部分。该项目当时是开源的。2020 年,身份服务器项目维护者成立了 Duende (opens new window),以支持他们发展身份服务器的努力,并更改为商业许可证。出于多种原因,我们选择继续在我们的模板中发布 IdentityServer (opens new window)(有关详细信息,请阅读博客文章),并在我们的模板中明确了许可要求。
IdentityServer 仍然是自托管符合标准的 Open ID Connect (opens new window) 和 OAuth 2.0 (opens new window) 解决方案的绝佳选择。Duende提供了自己的模板 (opens new window)来与 ASP.NET Core身份集成。除了IdentityServer(如果您有资格获得社区版 (opens new window),它仍然是免费的)之外,还有许多其他可用的自托管选项,包括开源OpenIddict (opens new window)项目和基于容器的Keycloak (opens new window)。
我们相信,此更改将为你的应用提供更多的自由度来选择正确的身份管理解决方案。
为了让您更轻松地发现和选择可用选项,我们的模板将链接到阐明您的选择的文档页面。该文档将列出并链接到模板、教程或示例,这些模板、教程或示例使你能够添加身份验证,无论是通过我们自己的服务(如 Azure AD)还是第三方产品(如 Duende 的标识服务器)。
# 改进了自托管解决方案的身份验证
许多用户不希望或不需要维护OAuth/OpenID Connect服务器的复杂性和开销。您的应用只需要能够通过登录验证用户的身份,并根据权限安全访问资源。自 ASP.NET Core身份平台发布以来,已内置对基于角色的访问和简单身份管理的支持。当您在我们的模板中选择“个人帐户”选项进行身份验证或使用命令行中的选项时,将启用自托管身份管理。您还可以在没有基架标识的现有项目中搭建基架标识 (opens new window)。Visual Studio 将搭建所需的代码,以生成和维护用户数据库,并通过角色管理登录名和权限。ASP.NET Core标识提供开箱即用的基于 Cookie 的身份验证体验。--authdotnet new
我们听取了您的反馈,并确定了Core 8 ASP.NET 需要改进的两个方面:
1.扩展现有的基于 Cookie 的身份验证以支持 SPA 应用中的自定义。基于 Cookie 的身份验证适用于较小的单域解决方案。若要自定义体验,必须覆盖我们用于呈现标识管理 UI 的默认服务器呈现的标识页。这会导致客户在从单页 Web 应用体验过渡到服务器呈现体验时体验不一致。该团队将添加 API 终结点,使开发人员能够为其自定义 UI 使用单页应用体验。
2.对现有标识进行现代化改造,以支持基于令牌的身份验证。像React,Angular和Blazor WebAssembly这样的SPA应用框架在采用率和功能方面继续增长。尽管我们现有的基于 cookie 的解决方案可以正常工作,但行业已经发展,如今基于令牌的身份验证解决方案更加灵活,而这正是启用身份验证的 SPA 应用程序所需要的。我们有许多用户要求一个简单的解决方案,不需要第三方依赖或许可。我们计划扩展现有标识平台,以启用基于令牌的身份验证。这主要反映了现有基于 Cookie 的解决方案的功能和功能,并将身份验证数据封装在令牌而不是 Cookie 中,使其能够在 Cookie 不是最佳或不合适的情况下工作。
注意
请务必注意,与 SPA 相关的增强功能面向在单个域上运行的解决方案,并且不需要向云资源或第三方 API 进行身份验证。Azure AD、IdentityServer 或其他第三方解决方案是具有这些要求的应用程序的首选选项。
# 更容易发现和学习
我们现有的文档涵盖了 ASP.NET Core标识 (opens new window)、Microsoft 标识平台 (opens new window)和 Azure AD (opens new window) 等功能。大多数现有文档都侧重于产品、技术和功能。我们听到你的反馈,即你希望获得更多指导和基于方案的文档。我们对 .NET 8 的目标是,你有一个起点来了解 .NET Auth 文档的可用选项,这些选项合并了指向支持教程和示例的链接,更重要的是提供特定的指导。例如,与具有数据库后端、第三方安全 API 依赖项和社交登录的业务应用程序相比,没有外部依赖项的独立 SPA 应用程序具有不同的要求。我们将与客户合作,确定常见方案,例如“保护现有 API 终结点”,并提供涵盖这些需求的端到端文档。
同时,Microsoft Entra (opens new window) 和 .NET 团队正在密切合作,不仅提供更好的文档和示例,而且还改进客户端、SDK 和工具,以减少成功将 Azure AD 添加到应用程序所需的步骤、代码、配置和概念。
# 后续步骤
我们正在实施这些更改,并在准备好供您试用时进行沟通。同时,我们欢迎您的反馈和见解,以帮助每个人更好地进行身份验证。为此,您可以提交描述 (opens new window)您面临的问题的问题,对现有问题进行投票 (opens new window),以帮助我们确定最具影响力的问题的优先级。我们也欢迎针对我们的 ASP.NET Core文档 (opens new window)提出问题和拉取请求,以帮助我们改进它。
我们知道我们可以做得更多,而在这个过程中最重要的投入就是您。请花几分钟时间通过回复我们的身份验证 ASP.NET Core (opens new window)调查来分享您的独特见解。它应该需要不到 10 分钟才能完成。