You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Windows Authentication后ASP.NET Core Web API远程访问异常求助

问题描述

基于Visual Studio 2022(版本17.8.5)的「ASP .NET Core Web API项目模板」创建Web服务时遇到以下问题:

  • 未启用Windows身份验证时,将localhost替换为电脑名称后,其他电脑或用户账户可正常远程访问服务
  • 启用「Windows身份验证」后,本地浏览器访问服务正常,但远程访问时报错:

InvalidOperationException: 在身份验证握手请求之间收到了匿名请求。

调试器输出窗口的详细错误日志:

Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler: 错误: 处理身份验证请求时发生异常。
System.InvalidOperationException: 在身份验证握手请求之间收到了匿名请求。
在 Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler.HandleRequestAsync()

解决方法

1. 修正服务端认证配置

在Program.cs中确保Windows身份验证的配置正确,且中间件顺序无误:

// 添加Windows身份验证服务
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

// 配置授权策略,确保默认策略生效
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

// 中间件顺序必须是先认证后授权
app.UseAuthentication();
app.UseAuthorization();

2. 检查IIS Express调试设置

若使用IIS Express调试服务:

  • 右键项目 → 属性 → 切换到「调试」选项卡
  • 勾选「启用Windows身份验证」,取消勾选「启用匿名身份验证」
  • 点击「Web服务器设置」中的「修改」按钮,确认Windows身份验证已启用、匿名身份验证已禁用

3. 调整客户端请求凭证设置

远程客户端必须正确发送Windows身份凭证,避免匿名请求中断认证握手:

  • 浏览器访问:确保浏览器自动发送当前Windows账户凭证(以Edge为例:设置→隐私、搜索和服务→安全性→本地Intranet区域→开启「自动登录到Intranet区域」)
  • 代码调用(以HttpClient为例):启用默认凭证发送
using var client = new HttpClient(new HttpClientHandler
{
    UseDefaultCredentials = true
});
var response = await client.GetAsync("http://你的电脑名称/api/weatherforecast");

4. 非域环境下启用NTLM fallback

如果服务端和客户端不在同一域环境,需在Program.cs中配置允许NTLM认证:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate(options =>
    {
        options.AllowNtlm = true;
    });

内容的提问来源于stack exchange,提问作者PrfctByDsgn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:45:09