ASP.NET登录触发InvalidOperationException:未注册登录认证处理程序
解决ASP.NET登录时"No sign-in authentication handlers are registered"错误
出现这个错误的核心原因是认证服务未正确注册或中间件顺序配置错误,以下是具体排查和解决方向:
检查认证服务注册的完整性
必须确保在Program.cs中同时调用AddAuthentication和AddCookie,且指定的认证Scheme与SignInAsync中使用的一致。比如:// 服务配置段 builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.LoginPath = "/Account/Login"; // 根据实际路由调整 options.ExpireTimeSpan = TimeSpan.FromDays(7); });这里
CookieAuthenticationDefaults.AuthenticationScheme对应默认的"Cookies",要和你在HttpContext.SignInAsync中传入的第一个参数完全匹配。严格遵守中间件顺序
中间件的调用顺序直接影响认证逻辑生效,必须保证:app.UseRouting(); app.UseAuthentication(); // 必须在UseAuthorization之前 app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });UseAuthentication要放在UseAuthorization之前,且在UseRouting之后、UseEndpoints之前,否则认证上下文无法正确初始化。迁移Startup.cs到Program.cs时的配置遗漏
如果是从旧的Startup.cs模式迁移到Program.cs,要确保原ConfigureServices中的认证配置完整迁移:- 原
services.AddAuthentication().AddCookie(...)要完整复制到builder.Services下 - 原
Configure方法中的app.UseAuthentication()和app.UseAuthorization()不能遗漏,且顺序不变
- 原
避免Scheme不匹配问题
如果自定义了Cookie认证的Scheme名称,比如AddCookie("AdminCookie", ...),那么在SignInAsync时必须传入对应的Scheme:await HttpContext.SignInAsync("AdminCookie", principal);不能混用默认Scheme和自定义Scheme。
内容的提问来源于stack exchange,提问作者Programming_guy
相关产品推荐
相关产品推荐

