首页 > 解决方案 > 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 => {  });

标签: c#asp.net-coreasp.net-identityasp.net-core-webapi

解决方案


好的,AddIdentity()方法实际上导致了问题。解决方案是用 替换它AddIdentityCore(),这是一种更轻量级的方法,并且在引擎盖下做的更少。然后必须手动添加缺少的服务,例如AddRoles(),如文档中所述。


推荐阅读