Asp.Net Core HTTP.SYS Windows 身份验证回退到 NTLM 而不是 Kerberos

Posted

技术标签:

【中文标题】Asp.Net Core HTTP.SYS Windows 身份验证回退到 NTLM 而不是 Kerberos【英文标题】:Asp.Net Core HTTP.SYS Windows authentication falls back to NTLM instead of Kerberos 【发布时间】:2019-08-28 16:04:24 【问题描述】:

我创建了一个使用 HTTP.SYS 和 Windows 身份验证的 ASP .NET core 2.2 应用程序:

.UseHttpSys(options =>

    options.AllowSynchronousIO = true;
    options.Authentication.Schemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.Negotiate | Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.Kerberos;
    options.Authentication.AllowAnonymous = false;
    options.MaxConnections = null;
    options.MaxRequestBodySize = 30000000;
    options.UrlPrefixes.Add("http://192.168.1.1:5000");
);

并在我的 PC 上运行(使用我当前的域用户,也是管理员)。如果我运行 Kerberos Authentication Tester,它会显示它正在使用 NTLM(当 Kerberos 不可用时,这是 Negotiate 的备份计划)。我的应用显示身份验证是协商。

如果我运行 Fiddler 并打开自动身份验证,然后重复测试,则 Kerberos 身份验证测试器显示 None 作为身份验证(预期!),而我的应用显示身份验证是 Kerberos。

为什么 Kerberos Authentication Tester 总是回退到 NTLM?

PC 运行的是 Windows 10 1803。

谢谢,

【问题讨论】:

【参考方案1】:

最终我找到了原因。我需要在 Kerberos Authentication Tester 中指定服务器完全限定域名而不是机器 IP。它神奇地起作用了。我得到的令牌是 SPNEGO,而不是 Kerberos,但我的理解是 SPNEGO 令牌包装了 Kerberos 或 NTLM。看到这个answer on SO

【讨论】:

以上是关于Asp.Net Core HTTP.SYS Windows 身份验证回退到 NTLM 而不是 Kerberos的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

Asp.Net Core HTTP.SYS Windows 身份验证回退到 NTLM 而不是 Kerberos

ASP.NET Core--.net core 3.1 部署到 IIS

docker部署asp.net core

ASP.NET Core 1.0 的 Kudu 部署脚本

Create an ASP.NET Core web app in Visual Studio Code