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

.NET5 ASP.NET Core WebApp在Kestrel上配置Windows认证不生效问题

现有配置核心问题

你的代码仅完成了认证服务和中间件的注册,未给访问资源添加授权校验规则。默认允许匿名访问的场景下,Kestrel不会主动触发Windows认证握手流程,因此无法加载用户身份信息,日志也会输出Negotiate was not authenticated的提示。

注意:本地IIS模式下运行正常是因为IIS层面直接禁用了匿名访问、开启了Windows认证,无需代码层面的授权规则就会强制触发认证;而Kestrel模式的认证触发完全由代码逻辑控制,二者行为存在差异。

修复步骤

优先添加授权规则,有两种实现方式:

  1. 给指定页面/全站点添加全局授权规则,修改Startup.ConfigureServices中的Razor Pages配置:
services.AddRazorPages()
    .AddRazorPagesOptions(options =>
    {
        // 仅给Index页添加认证要求
        options.Conventions.AuthorizePage("/Index");
        // 若需要全站强制认证,使用下面的配置
        // options.Conventions.AuthorizeFolder("/");
    });
  1. 给Index页的PageModel添加授权属性,修改Index.cshtml.cs文件:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;

[Authorize]
public class IndexModel : PageModel
{
    // 原有代码不变
}
其他需要排查的内容
  • 服务运行账号权限:运行WebApplication2.exe的账号必须为域账号,如果使用自定义域账号运行服务,需要为该账号注册对应站点的SPN(服务主体名称),执行命令:setspn -S HTTP/你的站点域名:端口 域\运行服务的账号名;如果使用本地系统/网络服务账号运行,SPN需要注册到服务器的计算机账号上。
  • Kerberos访问规则:访问站点时优先使用域名而不是IP地址,Kerberos协议默认不支持IP形式的站点识别,IP访问会降级为NTLM认证,若服务器禁用了NTLM则会直接认证失败。
  • 服务器安全策略:运行secpol.msc打开本地安全策略,依次进入「本地策略→用户权限分配」,确认运行服务的账号和访问用户都在「允许通过网络访问此计算机」「在本地登录」的允许列表中,没有被加入拒绝列表。
  • 浏览器配置:确认站点已经加入浏览器的本地Intranet站点列表,Firefox需要手动在about:config中修改network.negotiate-auth.trusted-uris配置,添加你的站点地址才会自动发送Windows认证凭证。
  • 系统补丁:确认Windows Server 2012已经安装了最新的安全更新,该版本存在多个已知的Kerberos认证相关BUG,未安装补丁会导致Negotiate认证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:09:04