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

.NET升级后Kerberos票据模拟级别异常问题排查求助

问题:.NET 5+/8下Kerberos委托认证失败,缺少krbtgt请求

架构与基础表现

  • 现有架构:Web应用A 调用 Web API B,B再调用 SharePoint站点C,三者均采用Windows认证
  • .NET Framework 4.7.2环境下:功能完全正常,SharePoint站点C可正确认证用户,Kerberos票据显示Impersonation Level: Delegation

升级.NET版本后的异常情况

将Web应用A的目标框架升级至.NET 8(同时测试过.NET 5),并将原IIS配置迁移至startup.cs后,出现以下问题:

  • Web应用A自身的Windows认证正常,调用Web API B的模拟操作也可执行,但Kerberos票据显示Impersonation Level: Impersonation,模拟级别不符合委托要求
  • SharePoint站点C返回HTTP 401错误,请求被识别为匿名状态

控制台程序验证结果

编写了控制台程序复现调用逻辑,代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://b.domain.com/resource");
request.ImpersonationLevel = TokenImpersonationLevel.Delegation;
request.UseDefaultCredentials = true;

try
{
    using (var response = (HttpWebResponse)request.GetResponse())
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        var c = reader.ReadToEnd();
        Console.WriteLine(c);
    }
}
catch (WebException e)
{
    Console.WriteLine(e.Message);
}
  • 测试结果:基于.NET 5在IISExpress运行时返回HTTP 401错误;基于.NET 4.7.2运行时可正常获取用户专属数据
  • 测试前提:复用相同IIS应用池,AppPool账户、SPNs、Windows认证等配置完全一致,仅目标.NET版本不同

抓包分析结果

对Web应用A所在服务器抓包后,得到以下差异:

  • .NET 8的失败请求:仅发送1个Kerberos请求,标记为(forwardable, renewable, canonicalize)
  • .NET Framework的成功请求:发送2个Kerberos请求
    • 第一个请求标记为(forwardable, renewable, canonicalize),包含2个SNameString属性:HTTP和b.domain.com
    • 第二个请求标记为(forwardable, forwarded, renewable, canonicalize, renewable-ok),SNameString属性为krbtgt和domain.com

求助问题

为何.NET 8不发送第二个krbtgt请求?该问题的根源及后续排查方向是什么?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:12:41