2009-07-23 59 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

相關問題