我用C ++编写的基于Windows的应用程序(基本上是HTTP / 1.1代理服务器)侦听来自不同用户的请求。 目前它能够发送407基本挑战,并处理来自标题的响应。 我知道我必须修改挑战标题,以便客户端浏览器为验证目的而制作基于NTLM的响应。但我的问题是 - 如何为407认证挑战生成正确的令牌,随机数等,然后如何验证收到的响应是否正确?最后,如果可能,我想记录客户端的用户名和其他LDAP / ADS属性。
如果已经有任何线程讨论类似的话,请善待,并将我重定向到正确的帖子。大多数关于WWW的研究只引导我进行客户端编程,很少或几乎没有 - 对于必须在HTTP服务器中进行的编码。
你们所有人都非常喜欢这里,非常感谢你们。
答案 0 :(得分:7)
简短的回答是我认为这是Using SSPI with a Windows Sockets Server样本 是您最好的起点,它应该演示您需要的基本SSPI呼叫。它是为普通的TCP服务器编写的,但挑战/响应数据是通过HTTP发送的,没有太多额外的复杂性。
[MS-N2HT]: Negotiate and Nego2 HTTP Authentication Protocol
我赞同审核the mod_auth_sspi for Apache code
的建议就个人而言,我也会尝试将一个低级调试器附加到IIS,看看他如何调用SSPI函数,但这可能不是你的一杯茶。
在您与SSPI达成目标之后,获取用户名应该是小菜一碟(但询问您是否需要帮助)。可以使用这些API查询用户的LDAP / AD属性。
长篇答案涉及很少的阅读:
Integrated Windows Authentication in Wikipedia
SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows
HTTP-Based Cross-Platform Authentication via the Negotiate Protocol (Part 1 of 3)
第3部分也有一些有趣的代码示例。
希望这有帮助!
答案 1 :(得分:2)
httpauth中的代码可以帮助您。它使用smbval代码来解析NTLM消息1和3.请参阅:http://memberwebs.com/stef/software/httpauth/
答案 2 :(得分:1)
您可以通过查看mod_auth_sspi
Apache模块
答案 3 :(得分:1)
但是我无法完成基于NTLM的挑战和响应。基本上我能够“痒”客户端以通过407 Proxy-authenicate选择基于NTLM的认证系统,这基本上需要3条消息。第一条消息必须是客户端发送的基于NTLM的请求,第二条消息是来自我的服务器的质询,第三条消息来自客户端。现在的问题是“如何生成NTLM质询,然后解密或验证NTLM授权,即消息3.
非常感谢Marsh和其他好的黑客,为了所有的努力,你采取了回应。我只能希望你愿意分享更多。
答案 4 :(得分:0)