Asp.net Windows身份验证-Kerberos或NTLM(ICO…)
我在intranet应用程序中遇到单个用户的问题。客户端是一个WPF应用程序,它与ASP.NETWebAPI Web服务进行通信 客户端使用发送HTTPS GET和POST请求Asp.net Windows身份验证-Kerberos或NTLM(ICO…),asp.net,iis,windows-authentication,kerberos,ntlm,Asp.net,Iis,Windows Authentication,Kerberos,Ntlm,我在intranet应用程序中遇到单个用户的问题。客户端是一个WPF应用程序,它与ASP.NETWebAPI Web服务进行通信 客户端使用发送HTTPS GET和POST请求 HttpClientHandler handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, UseDefaultCredential
HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
UseDefaultCredentials = true,
PreAuthenticate = true
};
在IIS上,通过NTLM和协商提供程序启用Windows身份验证
该系统适用于除401.1之外的所有用户,但仅适用于POST请求
我现在正试图找出这个用户的不同之处。我唯一注意到的是一种不同的授权头
从(和许多其他资源)我读到:
如果报头以“T”开头(例如:HTTP:Authorization=govertiate-TlRMTVNTU…),则使用的是NTLM如果它以“Y”开头(例如:授权:协商YIILjgYGKwYB…),那么您成功地使用了Kerberos
我可以看到似乎使用Kerberos的工作请求的标题:
Authorization: Negotiate YIIT4QYGKwYBBQUCoIIT1TCC...
从未能发布的用户发送的标题如下所示
Authorization: Negotiate oYICOTCCAjWgAwoBAaKCAhg...
它以
o
开头这是NTLM还是Kerberos?POST请求的身份验证失败,但GET成功 为什么不使用Wireshark呢
Wireshark将检查所有交通。我将把票证从ASN.1分解为一个可显示的树结构。您将看到在您的案例中使用了什么机制。此外,您将看到所有Kerberos流量,例如,如果存在“协商”,则您的TGS-REQ
两个请求似乎都是试图使用Spnego协商机制。虽然Spnego经常与Kerberos结合使用,但不应混淆两者
授权:谈判
…是Spnego NEGTONKERESP(Microsoft文档中的NEGTONKETARG)
这可能包含Kerberos令牌、NTLM或Spnego协议(或所使用的特定Spnego实现)支持的任何其他可协商子机制。所以这可能是Kerberos、NTLM或其他东西
“oY”解码为十六进制字节“a1”,就像“oQ”解码为“oZ”,所以其中任何一个都可能表示NegTokenResp
授权:谈判易
…是Kerberos令牌(可能具有Kerberos或Spnego OID)
它可以“直接”发送,也可以封装在Spnego令牌中(例如,上面的NEGTONKERESP)。感谢您的回答(尽管它更像是一个评论,而不是真实的回答)。我不使用Wireshark,因为我不知道:)也许你可以提供更多的细节,如何使用Wireshark解决这个问题,并使你的帖子成为一个真实的答案。如果它以YHU开头,它可能是一个NTLM。它必须从YII开始,至少是Kerberos。