ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档,使发现和实施身份管理解决方案更加容易。

背景

在 ASP.NET Core 应用程序中启用身份验证的开发人员面临着多种选择:

  • ASP.NET Core 提供了内置的 ASP.NET Core Identity 解决方案来管理用户登录和授权。

  • Azure Active directory (Azure AD) 是 Azure 云托管的解决方案,提供细粒度访问控制,并支持高级场景,如“由应用程序代表用户”为 APIs 授权资源。

  • 以包、容器和云服务的形式提供各种第三方解决方案。

ASP.NET Core Identity 是我们独立的开箱即用的解决方案。它包括:

  • Identity Manager 提供用于处理用户(包括声明和登录)和角色的 APIs。

  • Identity Store 接口用于持久化标识信息(用户、声明、登录提供者和角色)。

  • 关系数据库身份存储的默认实现。您可以选择创建自己的身份存储的自定义实现。

  • 身份验证系统(SignInManager)。

  • 用户管理界面(Identity UI)。

目前,在 SPA 应用程序中使用 ASP.NET Core Identity 存在一些限制。传统的自定义身份相关页面的方式会迫使你的应用程序回归到服务器渲染的网页。我们依靠外部(第三方)包来支持基于令牌的身份验证。

我们已经听到了您的反馈,并正在研究一种解决方案,以支持更多的没有外部依赖项的即用场景。这使你可以灵活地马上开始使用一个解决方案,同时保持选择其他选项的自由。我们最近在 GitHub 上分享了我们的身份验证计划,得到了很多正面反馈,感谢有机会与这样一个支持我们的社区合作。

IdentityServer 和 SPA 模板

为了处理客户反馈,提供更多的选项并尽可能地简化,我们计划从 .NET 8 中的 SPA 模板中移除对 Duende 的 IdentityServer 的依赖。

作为背景,我们开始发布 IdentityServer4 以支持单页应用程序(SPA)中的 JSON Web Token(JWT)安全性,作为.NET Core 3.1 中 Angular、React 和 Blazor WebAssembly 模板的一部分。该项目当时是开源的。2020年,IdentityServer 项目维护者创建了 Duende,以支持他们努力发展 IdentityServer 并将其更改为商业许可。出于多种原因,我们选择在我们的模板中继续提供 IdentityServer,并在我们的模板中明确了许可要求。

对于自托管符合标准的 Open ID Connect 和 OAuth 2.0 解决方案来说,IdentityServer 仍然是一个绝佳的选择。Duende 提供了他们自己的模板与 ASP.NET Core Identity 集成。除了 IdentityServer (如果您符合社区版的条件,它仍然是免费的)之外,还有许多其他自托管选项可用,包括开源的 OpenIddict 项目和基于容器的 Keycloak。

我们相信这一改变将为您的应用程序选择正确的身份管理解决方案提供更多自由。

为了让您能更轻松地发现可用选项并从中进行选择,我们的模板将链接到一个文档页面,以阐明您的选择。该文档将列出并链接到模板、教程或示例,使您能够添加身份验证,无论是通过我们自己的服务(例如 Azure AD)还是第三方产品(例如 Duende 的 IdentityServer)。

改进自托管解决方案的身份验证

许多用户不希望或不需要维护 OAuth/OpenID Connect 服务器的复杂性和开销。您的应用程序只需要能够通过登录验证用户身份并根据权限安全访问资源。自发布以来,ASP.NET Core 身份平台就内置了对基于角色的访问和简单身份管理的支持。当您在我们的模板中选择“个人帐户”选项进行身份验证或在命令行上使用 dotnet new 的 --auth 选项时,将启用自托管身份管理。您还可以在没有身份的现有项目中搭建身份脚手架。Visual Studio 将构建所需代码以生成和维护用户数据库并通过角色管理登录和权限。ASP.NET Core Identity 提供了一种开箱即用的基于 cookie 的身份验证体验。

我们听取了您的反馈,并确定了 ASP.NET Core 8 中需要改进的两个方面:

▌扩展现有的基于 cookie 的身份验证,以支持 SPA 应用程序中的自定义

基于 cookie 的身份验证适用于较小的单域解决方案。要自定义体验,您必须覆盖我们用于呈现身份管理 UI 的默认服务器呈现的身份页面。当客户从单页 web 应用程序体验过渡到服务器呈现的体验时,这会导致不一致的体验。该团队将添加 API 端点,使开发人员能够在自定义 UI 中使用单页应用程序体验。

▌使现有身份现代化以支持基于令牌的身份验证

React、Angular 和 Blazor WebAssembly 等 SPA 应用程序框架的应用和功能不断增长。尽管我们现有的基于 cookie 的解决方案有效,但行业已经发展了,如今基于令牌的身份验证解决方案更加灵活,而这正是支持身份验证的 SPA 应用程序所需要的。我们有许多用户需要一个不需要第三方依赖项或许可的简单解决方案。我们计划扩展现有的身份平台以启用基于令牌的身份验证。这将主要反映现有基于 cookie 的解决方案的能力和功能,并将身份验证数据封装在令牌而不是 cookie 中,并使其能够在 cookie 不是最佳或不合适的情况下工作。

值得注意的是,SPA 相关的增强针对的是在单个域上运行的解决方案,并且不需要对云资源或第三方 APIs 进行身份验证。对于有这些需求的应用程序,Azure AD、IdentityServer 或其他第三方解决方案是首选。

更容易探索和学习

我们现有的文档涵盖了像 ASP.NET Core Identity、Microsoft Identity 平台和 Azure AD 等功能。大多数的现有文档侧重于产品、技术和功能。.NET 8 的目标是让您有一个单一的起点来学习 .NET Auth 文档的可用选项,它整合了支持教程和示例的链接,更重要的是提供了具体的指导。例如,与具有数据库后端、第三方安全 API 依赖项和社交登录的业务应用程序相比,没有外部依赖项的独立 SPA 应用程序具有不同的需求。我们将与客户合作,确定常见的场景,如“保护现有 API 端点”,并提供涵盖这些需求的端到端文档。

与此同时,Microsoft Entra 正在与 .NET 团队进行密切合作,不仅提供了更好的文档和示例,而且还改进了客户端、SDKs 和工具,以减少将 Azure AD 成功添加到应用程序所需的步骤、代码、配置和概念。

下一步

我们正在改变的过程中。在此期间,欢迎您提供反馈和意见,以帮助为每个人提供更好的身份验证。您可以通过在 GitHub 提交 issue 来描述您的问题,或对现有问题进行投票来帮助我们优先考虑影响最大的问题。也欢迎针对我们的 ASP.NET Core 文档提出问题和拉取请求。

点我前往 GitHub 身份验证计划~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/20351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM+JSP的人体健康信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

JMeter入门配置

目录 场景: 环境及工具 : JMeter中文配置: 配置登录接口: 配置响应结果: 配置json提取器 测试json提取器 配置Beanshell后置处理器: http请求右键-->添加---->后置处理器--->Beanshell后置处理…

第五章 面向对象-7.hashCode()和toString()

hashCode()和toString() hashCode() hashCoed 的特性: (1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode经常用于确定对象的存储地址; (2)如果…

MySQL基础(二十九)数据库的设计规范

1 范式 1.1 范式简介 在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。可以理解为,一张数据表的设计结 构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 1.2 范式都包括哪些 目…

医院内导航及智能导医,医院导诊图怎么制作?

在大型综合性医院,由于专业分工精细,一个诊疗过程涉及的功能单元往往分布在不同的楼宇、不同楼层的不同位置,再加上多数患者对医院环境不熟悉,导致滞院的时间长、诊疗效率低、患者对服务的满意度下降。为解决这一问题,…

空中下载技术(OTA)电控信息安全

随着汽车电子控制系统功能复杂度和数据颗粒度呈阶梯式增加,其发展速度逐渐超越网络安全防护方法、技术和标准的发展,现阶段汽车电子正面临巨大的网络信息安全风险,对功能安全的潜在影响也仍在探索和解决中,信息安全问题已经成为影…

C++ 中到底是应该include .h文件还是应该include .cpp文件

在阅读一个较大的解决方案中,对于其他文件夹下的.h和.cpp文件,有时候#include“XXX.h”文件,有时候是#include“XXX.cpp”文件,而且二者还不能更换。下面就好好分析一下他们二者的区别。 测试 测试:XXX.h和XXX.cpp…

Linux内核(十四)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径:drivers/input/input.c input_handle结构体详解 input_ha…

(转)雪花算法(SnowFlake)

简介 现在的服务基本是分布式、微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。 对于 MySQL 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多…

第八章结构型模式—装饰者模式

文章目录 装饰者模式解决的问题概念结构 案例使用装配者进行改进 使用场景JDK源码分析 静态代理和装饰者的区别 结构型模式描述如何将类或对象按某种布局组成更大的结构,有以下两种: 类结构型模式:采用继承机制来组织接口和类。对象结构型模式…

【Wi-Fi】802.11/802.11b/802.11g/802.11n/802.11a/802.11ac/802.11ax/802.11be

WiFi发展历史 IEEE 802.11 Protocol Release Date Frequency Band Bandwidth Max Throughput 802.11-1997 1997 2.4GHz 22MHz 2Mbps 802.11b 1999 2.4GHz 22MHz 11Mbps 802.11a 1999 5GHz 20MHz 54Mbps 802.11g 2003 2.4GHz 20MHz 54Mbps 802.11n (W…

计算机组成原理基础练习题第一章

有些计算机将一部分软件永恒地存于只读存储器中,称之为() A.硬件    B.软件C.固件    D.辅助存储器输入、输出装置以及外界的辅助存储器称为() A.操作系统    B.存储器 C.主机      D.外围设备完整的计算机系…

OpenCL编程指南-4.1OpenCL C编程

使用OpenCL C编写数据并行内核 OpenCL中的数据并行性表述为一个N维计算域,其中N1、2或3。N-D域定义了可以并行执行的工作项的总数。下面通过一个简单的例子来了解如何用OpenCL C编写一个数据并行内核,将两个浮点数数组相加。这个代码的串行版本求和时需…

力扣19删除链表的倒数第 N 个结点:思路分析+图文全解+方法总结(快慢指针法递归法)+深入思考

文章目录 第一部分:题目描述第二部分:代码实现2.1 快慢指针法2.2 递归 第一部分:题目描述 🏠 链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) ⭐ 难度:中等 第二部分&#…

lol由于找不到vcruntine140_1.dll文件,vcruntime140_1.dll修复方法

家人们有没有遇到过打开游戏或者软件提示由于找不到vcruntime140_1.dll,无法继续执行此代码的情况,是不是不知道怎么修复呢?Vcruntime140_1.dll是一个Windows系统文件,它是Microsoft Visual C Redistributable for Visual Studio …

【嵌入式环境下linux内核及驱动学习笔记-(11-设备树)】

目录 1、设备树体系1.1 DTS /DTSI / DTC / DTB 2、基础语法2.1 节点语法2.1.1 通用名称建议 2.2 属性语法2.2.1 属性值 2.3 关于label2.4 节点的[unit-address] 与reg属性2.5 根节点 /2.6 标准属性compatible2.6.1 of_machine_is_compatible函数 2.7 地址编码2.7.1 标准属性#ad…

RabbitMQ养成记 (3.MQ的简单工作模式 和 Pub/sub 订阅模式)

上一篇是一个简单的helloworld。 我们直接发直接收 这种是最简单的。 下面我们再来接触更加复杂一点: 简单工作模式 work queues 工作队列模式: 这里注意 这里的消息 对两个消费者 c1 c2来说是竞争关系 而不是等份分发关系, 就像两个线程…

JVM 方法区

栈、堆、方法区的交互关系 线程共享角度: 新建对象分配: 方法区的理解 方法区(Method Area) 与 Java 堆一样,是各个线程共享的内存区域方法区在 JVM 启动的时候被创建,并且它的实际物理内存空间中和 Java 堆区一样都可以不连续的方法区的大小&#xf…

HNU-操作系统OS-实验Lab5

OS_Lab5_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 实验目的 了解第一个用户进程创建过程了解系统调用框架的实现机制了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理 实验…

1099 Build A Binary Search Tree(超详细注解+38行代码)

分数 30 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree…