.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
相关产品推荐
相关产品推荐

