2016-06-24 23 views
0

我有安裝Microsoft Exchange 2010 NLTM認證的問題我想提出一個應用程序來從EWS交換一些數據,因爲我已經在交易所啓用NTLM服務器我需要確保我的請求遵循NTLM握手過程。我已經研究了這個過程,並且我明白它是由六個步驟組成的,可以進行四次握手。下面的代碼片段解釋清楚:NTLM挑戰失敗或不正確的順序,向交易所2013

1: C --> S GET ... 

2: C <-- S 401 Unauthorized 
       WWW-Authenticate: NTLM 

3: C --> S GET ... 
       Authorization: NTLM <base64-encoded type-1-message> 

4: C <-- S 401 Unauthorized 
       WWW-Authenticate: NTLM <base64-encoded type-2-message> 

5: C --> S GET ... 
       Authorization: NTLM <base64-encoded type-3-message> 

6: C <-- S 200 Ok 

字母C代表客戶端,字母S代表服務器。有關NLTM的更多信息,請參閱here,我也將其用作參考。

所以客戶端發出到服務器以401響應,告訴它需要證明自己的身份,客戶端的GET請求。它也在相應的頭部中發送認證方法,在這種情況下是NTLM。然後客戶端發送所謂的Type-1消息,其中包含客戶端的主機名和域名。然後,服務器以包含NTLM挑戰的所謂的Type-2消息進行響應。客戶端然後用另一個請求,Type-3消息響應,其中包含用戶名,域名,主機名和兩個響應。

我也明白,NTLM身份驗證連接,而不是要求我採取必要步驟,以確保連接保持活動狀態。

我們確認我可以向EWS通過NTLM發送請求我使用了一種叫做SoapUI,送我的SOAP請求的工具。 SoapUI具有處理NTLM的內置功能,因此我只需在那裏輸入用戶名,密碼和域,並在發送請求時處理與服務器的NTLM握手。現在,所有這些都通過SoapUI正常工作,請求通過握手進行,最終我得到服務器的200響應。爲了向您展示這一點,我使用Microsoft Message Analyzer來檢查傳入和傳出的http請求。這些是SoapUI和從SoapUI發送初始請求時發生的服務器之間的請求。

SoapUI request

正如你可以看到這些請求,按照其握手是應該發生的形式上面的圖。

現在的轉折點。我通過我的應用程序做了所有這些,理論上也是如此。在我的基於節點的應用程序中,我使用this庫向EWS發出請求,反過來它也使用this庫來處理NTLM握手。所以除了我設置用戶名,密碼,網址,域名和主機名之外,我沒有別的辦法可以解決這個問題。所以我使用庫來格式化我的請求,併發布它只是爲了查看它無法通過NTLM進行身份驗證。我查看了這兩個庫,我可以看到httpntlm遵循NTLM握手協議,並最終發送了一個合適的NTLM令牌,但我無法弄清楚什麼是錯誤的。這是當我從我的應用程序發出請求時http流的樣子。

Application HTTP

現在只要看一眼這個和以前的形象,你可以當場的差異。首先,沒有驗證頭的初始請求和響應不存在。我不確定在這個NTLM握手中它們是否可選,所以當SoapUI沒有時,庫會省略它們?

而且爲什麼是第二圖像的認證頭到NTLMv2的所述第二圖像中,只以在NTLM第一個。我知道NTLM有兩個版本,我在服務器上啓用了它們,但爲什麼它在請求中有不同的規定。我找不到任何指定NTLMv2的庫。

在第二個圖像中,似乎Type-2消息可能從未作爲服務器的響應到達?

無論如何,我無法弄清楚這裏發生了什麼,以及爲什麼這個http流的主要區別。任何幫助,將不勝感激。

回答

0

更新了對[email protected]的NTLMv2支持。請參閱[email protected]模塊。您可以安裝1.2.0並在github頁面上使用示例。

@nextews-javascript-api的開發標記,它將很快脫離開發(在github上跟蹤里程碑0.9)。

在guthub中爲此打開了一個問題,以獲得更快的分辨率。