ASP.NET Core使用HTTP.sys启用Windows认证时Postman报ECONNRESET错误求助
问题原因及解决方案
1 请求协议与重定向冲突
你配置了app.UseHttpsRedirection()中间件,若Postman发送的是HTTP请求,服务端会触发重定向跳转HTTPS,而NTLM认证是基于长连接的会话机制,重定向会中断认证握手流程,直接导致连接被重置。
- 解决方案:优先用HTTPS地址发起请求,测试阶段可临时注释
app.UseHttpsRedirection()再验证。
2 运行权限不足
HTTP.sys的身份认证配置需要系统管理员权限才能生效,若启动项目时未用管理员权限运行Visual Studio/终端,会导致HTTP.sys配置加载失败,主动断开客户端连接。
- 解决方案:右键点击运行环境(VS/终端),选择「以管理员身份运行」后重启项目。
3 Postman NTLM配置错误
本地Windows账户的NTLM认证对参数有明确要求,配置错误会触发连接重置:
- 本地账户的**域(Domain)**栏填
.(英文句号)或者本地计算机名,不要留空 - 用户名不要加计算机名前缀,直接填本地账户名即可
- 若你当前Windows用微软账户登录,需额外设置本地账户密码,不能直接用微软账户密码做NTLM认证
4 SSL证书验证拦截
若你使用HTTPS测试且用的是开发环境自签名证书,Postman默认会拦截不受信任的SSL证书,间接导致连接中断。
- 解决方案:打开Postman设置 -> 通用选项卡,关闭
SSL certificate verification开关后重试。
5 接口缺少认证触发配置
你在HTTP.sys配置中设置了options.Authentication.AllowAnonymous = true,若测试接口没有添加[Authorize]特性,服务端不会主动触发Windows认证握手流程,异常情况下会直接断连。
- 解决方案:在测试的Controller或者Action上添加
[Authorize]特性。
现有配置校验
你给出的两个配置文件代码本身没有顺序错误:
Startup.cs 核心逻辑
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddAuthentication(HttpSysDefaults.AuthenticationScheme); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "webwinauth", Version = "v1" }); }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "webwinauth v1")); } app.UseHttpsRedirection(); app.UseRouting(); // 认证、授权中间件顺序符合要求 app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
Program.cs 核心逻辑
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate; options.Authentication.AllowAnonymous = true; }); });
内容的提问来源于stack exchange,提问作者李侑珊
相关产品推荐
相关产品推荐

