我已经创建了一个使用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上运行(使用当前的域用户,该用户也是admin)。如果我运行Kerberos身份验证测试器,则表明它正在使用NTLM(这是Kerberos不可用时“协商”的备份计划)。我的应用程序显示身份验证为“协商”。
如果我运行Fiddler并打开自动身份验证,然后重复测试,则Kerberos Authentication Tester会显示None作为身份验证(预期!),而我的应用程序会显示身份验证是Kerberos。
为什么Kerberos身份验证测试器总是退回到NTLM?
PC正在运行Windows 10 1803。
谢谢
答案 0 :(得分:0)
最终我找到了原因。我需要在Kerberos Authentication Tester中指定服务器的标准域名,而不是机器IP。它神奇地工作。我获得的令牌是SPNEGO,而不是Kerberos,但我的理解是SPNEGO令牌包装了Kerberos或NTLM。看到这个answer on SO