我正在通过手动处理NTLM身份验证来替换ASP.NET应用程序中的集成Windows身份验证。 NTLM身份验证不是问题,我有一个NTLM SSPI模块(https://github.com/FreeRDP/FreeRDP/tree/master/winpr/libwinpr/sspi/NTLM)的完整开源实现。我的主要问题是NTLM是面向连接的,而HTTP通常是无状态的。在阅读了有关NTLM身份验证之后,它被描述为需要使用HTTP Keep-Alive,其中每个请求都不会发送cookie。只要连接保持活动状态,NTLM身份验证状态就会保留。
我找到了在IIS中正确启用HTTP keep-alive的方法,但我发现在ASP.NET中没有办法将数据与特定连接相关联。即使在NTLM结束时可以向客户端提供cookie,如果在接收NTLM CHALLENGE和发送NTLM AUTHENTICATE消息之间没有维持会话状态,则无法完成NTLM。显然,当使用IIS的内置集成Windows身份验证支持时,它能够跟踪NTLM身份验证的多个步骤之间的状态。
我正在寻找的是一种跟踪多个请求进入同一个保持活动的HTTP连接的方法。 HttpRequest中的数据似乎仅特定于当前请求,并且没有任何东西允许我识别连接。充其量,可能有一个服务器变量(http://msdn.microsoft.com/en-us/library/ms524602.aspx),如连接临时端口,可用于标识相同的连接。这可能会起作用,但我无法找到一种方法来可靠地检测关联连接何时关闭。
想法,有人吗?
答案 0 :(得分:0)
没有办法确定当前请求是在新的TCP连接中还是重新使用连接。
可以通过将额外标头发送到http标头中标识的当前tcp连接来完成。