ASP.NET Core身份验证处理程序未注册错误求助
ASP.NET Core身份验证处理程序未注册错误求助
嘿,我看你在野外碰到这个棘手的身份验证错误了,别慌,咱们一步步拆解问题解决它!
先把你遇到的错误信息贴出来,方便定位问题:
System.InvalidOperationException: No authentication handler is registered for the scheme 'You do not have permission to access this resource.'. The registered schemes are: Negotiate, Windows. Did you forget to call AddAuthentication().Add[SomeAuthHandler]("You do not have permission to access this resource.",...)?
问题分析
你看错误里提到的scheme居然是You do not have permission to access this resource.——这明显是个权限提示文本,根本不是合法的身份验证scheme名称!这说明你的代码配置里肯定出了逻辑混乱的问题。再看你贴的Program.cs代码,发现你重复调用了两次AddAuthorization,第二次调用会直接覆盖第一次的配置,这种重复配置很容易导致意外的错误关联。
解决方案
咱们把重复的授权配置合并,同时确保身份验证和授权的配置逻辑清晰,步骤如下:
- 合并
AddAuthorization的配置,只调用一次,把默认策略和回退策略放在同一个配置块里 - 确保身份验证scheme使用正确的
NegotiateDefaults.AuthenticationScheme - 记得在请求管道里按顺序添加
UseAuthentication和UseAuthorization(你的代码里没贴全这部分,一定要注意顺序)
修正后的Program.cs代码示例:
using Microsoft.AspNetCore.Authentication.Negotiate; using Microsoft.AspNetCore.Authorization; // 身份验证配置 builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme) .AddNegotiate(); // 合并授权配置,只调用一次AddAuthorization builder.Services.AddAuthorization(options => { // 配置默认策略:要求用户已认证 options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); // 回退策略和默认策略保持一致 options.FallbackPolicy = options.DefaultPolicy; }); builder.Services.AddHttpContextAccessor(); var app = builder.Build(); // 配置请求管道,注意顺序:先认证,再授权 if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); // 关键:先启用身份验证,再启用授权 app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
为什么这样改能解决问题?
- 重复调用
AddAuthorization会导致后一次的配置完全覆盖前一次,很容易出现逻辑冲突,合并后配置更清晰可控 - 错误里的奇怪scheme大概率是重复配置导致的意外关联,合并后就能避免这种问题
- 请求管道里
UseAuthentication必须在UseAuthorization之前,这样才能先完成用户身份验证,再进行授权判断
备注:内容来源于stack exchange,提问作者Mansoor Saleem
相关产品推荐
相关产品推荐

