默认身份验证方案

从 .NET 7 开始,我们在 ASP.NET Core 中的身份验证领域内引入了新行为。

以前,用户需要在 AddAuthentication 调用中设置默认身份验证方案,该方案由身份验证和授权处理程序使用:

builder.Services.AddAuthentication("MyDefaultScheme");

后来,在注册单个身份验证方案后,该方案就将被视为默认方案。 例如,“MyDefaultScheme”将在以下代码中被视为默认方案。

builder.Services.AddAuthentication().AddOAuth("MyDefaultScheme");

此更改可能会公开应用程序中的意外行为变更,例如验证身份验证选项的时间比预期的要早。

引入的版本

ASP.NET Core 7.0

旧行为

以前,如果用户未在 AddAuthentication 调用中提供默认方案,将不会设置默认方案。

builder.Services.AddAuthentication().AddCookie();

这影响了应用程序层中身份验证处理程序的行为。

新行为

从 ASP.NET Core 7.0 开始,当(且仅当)在应用程序中注册了单个方案时,该方案将被视为默认方案。 在以下代码中,CookieDefaults.AuthenticationScheme 被视为默认方案。

builder.Services.AddAuthentication().AddCookie();

但是,在下一个代码片段中,不会设置默认值,因为注册了多个方案。

builder.Services.AddAuthentication().AddCookie().AddJwtBearer();

中断性变更的类型

此更改会影响二进制兼容性。

更改原因

进行此更改是为了在配置身份验证时减少样本,以及设置合理的默认值。

此更改仅影响注册了单个方案的应用程序。 对于这些方案,建议确保应用程序已准备好处理单个方案为默认值的假设。 例如,确保正确配置了与该方案关联的选项。

或者,可以通过设置 Microsoft.AspNetCore.Authentication.SuppressAutoDefaultScheme 应用上下文标志来禁用新行为。

受影响的 API

身份验证 API。