2009-07-23 61 views
4

用C++编写的基于Windows的应用程序(基本上是HTTP/1.1代理服务器)侦听来自各种用户的请求。 目前它能够发送407基本挑战,并处理来自头部的响应。 我知道我必须修改挑战标题,以便客户端浏览器为验证目的制作基于NTLM的响应。但我的问题是 - 如何为407身份验证挑战生成正确的令牌,随机数等,然后如何验证接收到的响应是否正确?最后,如果可能,我想记录客户端的用户名和其他LDAP/ADS属性。用于Web服务器端应用程序的NTLM身份验证

如果已经有任何讨论类似问题的线索,请亲切,并将我重定向到正确的帖子。大多数关于WWW的研究只会引导客户端编程,很少或几乎没有 - 对于必须在HTTP服务器中完成的编码。

你们所有人都在这里大干一场,大家提前致谢。

回答

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

记录的无证NTLM方案经过一番挣扎后的Java实现我已经设法走到这么远: 在我的代理服务器上,我可以挑战客户端的基本/ NTLM身份验证。当用户发出“基本”响应时,我可以使用SSPI验证凭据。此文档帮助:http://support.microsoft.com/kb/180548

但是,我只是无法获得基于NTLM的挑战和响应完成。基本上,我能够“痒痒”客户端以通过407代理验证来选择基于NTLM的验证系统,这基本上需要3条消息。第一条消息必须是客户端发送的基于NTLM的请求,第二条消息是来自我的服务器的挑战,第三条消息来自客户端。现在问题是“如何生成NTLM挑战,然后解密或提取NTLM授权即消息3.

非常感谢Marsh和其他好的黑客,对于您所做的所有努力,做出回应,我只希望,你是愿意分享更多的

2

有一个在httpauth代码,可以帮助你它使用smbval代码来解析NTLM消息1和3。见:。http://memberwebs.com/stef/software/httpauth/

+0

httpauth可能是非常有用的,但不幸的是文档是不够的,尽管如此,它看起来非常有前途,其中的docs文件夹包含一个protocols.txt文件,但需要一个破解很多! 我是s直到玩它,我不知道它是否真的有效。但如果真的这样,它可以让鱿鱼/桑巴舞团中的伙伴跳出他们的袜子!我相信有更多像我这样的人希望它真的有效! – mdk 2009-09-25 13:57:47

相关问题