c# - ASP NET 5 - 使用身份时忽略自定义身份验证方案处理程序
问题描述
自定义身份验证方案和处理程序将被忽略。当控制器方法由 注释时[Authorize]
,即使将其设置为默认身份验证方案,我的方案也不会受到挑战。相反,发送 302 状态并重定向到/Accounts/Login...
. 不仅我的应用程序中甚至不存在此 URL(我在客户端使用 Blazor WASM),而且我的应用程序中根本没有任何代码会导致这种行为。当我直接在属性中指定它时调用我的身份验证处理程序:[Authorize(AuthenticationScheme = CustomAuthHandler.SchemeName)]
为什么默认身份验证方案被忽略,而是运行代码中根本没有指定的东西?如果AddIdentity()
配置了这种意外行为,它记录在哪里以及如何重新配置?如何使框架不忽略我的处理程序,注册为默认值?
一切正常,直到我切换到 .NET 5 并开始使用 Identity 框架。
这是我的ConfigureServices
:
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("DefaultConnection"), ServerVersion.FromString("10.5.6-mariadb"));
});
services.AddIdentity<ApplicationUser, IdentityRole>(
options =>
{
options.User.RequireUniqueEmail = true;
}
)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddClaimsPrincipalFactory<ApplicationUserClaimsFactory>();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthentication(
options =>
{
options.DefaultScheme = CustomAuthHandler.SchemeName;
}
)
.AddScheme<AuthenticationSchemeOptions, CustomAuthHandler>(CustomAuthHandler.SchemeName, x => { });
解决方案
好的,AddIdentity()
方法实际上导致了问题。解决方案是用 替换它AddIdentityCore()
,这是一种更轻量级的方法,并且在引擎盖下做的更少。然后必须手动添加缺少的服务,例如AddRoles()
,如文档中所述。
推荐阅读
- c# - shapefile 边界框未通过 rest api geoserver 正确设置
- reactjs - Next.js 中的持久布局与 TypeScript 和 HOC
- python - SessionNotCreatedException 仅支持 Chrome 版本 80
- python-3.x - Python 字典 - 无效的语法
- c# - 'Microsoft.Data.Sqile.SQliteConnection' 的类型初始化程序引发异常 C#
- spring-boot - Hibernate 在事务提交时不刷新实体更新
- ruby-on-rails - Rails API Globalize 获取所有翻译
- java - 在 LibGDX 游戏中显示 FPS
- javascript - 节点js中的解码问题
- c# - 在 C# 中使用 SSH.NET 下载以前缀名称开头的 SFTP 文件