2010-12-06 198 views
6

對不起,如果它是重複的,因爲我不是一個安全或網絡專家我可能錯過了正確的術語來查找信息。如何通過反向代理啓用Windows身份驗證?

我在處理應用程序截取並修改Web瀏覽器和Web服務器(請參閱how to intercept and modify HTTP responses on server side?爲背景)之間的HTTP請求和響應。我決定在ASP.Net中實現一個反向代理,該代理將客戶端請求轉發給後端HTTP服務器,將響應中的鏈接和標題翻譯爲正確的「代理」URL,並在提取相關信息後將響應發送給客戶端從響應。

它工作正常,除了認證部分:Web服務器默認使用NTLM身份驗證,只是通過反向代理轉發請求和響應不允許用戶在遠程應用程序進行身份驗證。反向代理和Web應用程序都位於同一臺物理機器上,並在同一臺IIS服務器上執行(Windows Server 2008/IIS 7)。我試過在反向代理應用上啓用和禁用身份驗證,但沒有運氣。

我已經找過關於它的信息,它似乎與「雙跳問題」有關,我不明白。我的問題是:有沒有一種方法可以通過使用NTLM的反向代理對遠程應用程序上的用戶進行身份驗證?如果沒有,我可以使用其他認證方法嗎?

即使你沒有解決我的問題,只是指着我關於它的相關信息,幫助我走出困惑的將是巨大的!

回答

8

我發現問題是什麼(它是NTLM):爲了讓瀏覽器詢問用戶的憑據,響應必須有401狀態碼。我的反向代理將響應轉發給瀏覽器,因此IIS添加了一個標準的HTML代碼來解釋請求的頁面無法訪問,從而阻止瀏覽器詢問憑據。 問題被刪除的響應內容解決時的狀態代碼是401

與所有尊重我有那個回答說,幾年前,我必須承認這顯然是假的。問題是確實解決之後,除去時的狀態代碼是401的應答內容,但它有沒有做最初的問題.. 事實是,Windows身份驗證是爲了驗證人在本地Windows網絡中,沒有代理服務器存在或甚至不需要。 NTLM身份驗證的主要問題是該協議不會對HTTP會話進行身份驗證,而是對底層的TCP連接進行身份驗證,並且據我所知無法從asp代碼訪問它。 我試過的每個代理服務器都打破了NTLM身份驗證。 Windows身份驗證對於用戶來說很舒服,因爲他永遠不需要輸入任何應用程序可能位於Intranet中的密碼,這對於安全人員來說是可怕的,因爲如果站點域值得信任,那麼即使沒有提示,也會自動登錄對於網絡管理員來說,這是令人震驚的,因爲它將應用程序,傳輸層和網絡層融入了一些「杯子的窗戶球」,而不僅僅是簡單的http流量。

+0

go for it fonzo! – 2015-11-26 09:51:45

3

儘管這是一個老帖子,我只是想向大家報告,它爲我工作得很好用APACHE2.2反向代理和存活= on選項。很明顯,這會使代理和SharePoint主機之間的連接保持打開狀態並「固定」到客戶端代理連接。我不完全知道這背後的機制,但它工作得很好。

但是:有時,我的用戶會遇到他們以另一個用戶身份登錄的問題。所以似乎有一些混合通過會議。我將不得不進行一些進一步的測試。

解決方案的一切(如果您有一個有效的,簽名的SSL證書):將IIS切換到基本身份驗證。這很好,甚至Windows(即Office with SharePoint連接,所有基於WebClient的流程等)也不會有任何抱怨。 但是,當您僅使用不帶SSL/TLS的http以及使用自簽名證書時,他們會這樣做。

2

我確認,它與作品「保活=的」在APACHE2.2

我examinated使用Wireshark框架,我知道爲什麼它不工作。 如果TCP數據包未完全按照反向代理接收它們的方式轉發,NTLM將無法正常工作。這就是爲什麼許多反向代理不適用於NTLM身份驗證。 (如nginx) 他們轉發HTTP請求糾正,但不是TCP數據包。

對於NTLM,需要TCP反向代理。

6

如果TCP數據包不完全轉發所收到的反向代理>他們NTLM將無法正常工作。這就是爲什麼許多反向代理不適用於NTLM身份驗證。 (如nginx)>它們正確轉發HTTP請求,但不轉發TCP數據包。

Nginx具有使用NTLM身份驗證的功能。 Keepalive需要啓用,只有通過http_upstream_module纔可用。此外,在位置塊中,您需要指定您將使用HTTP/1.1,並且應爲每個代理請求清除「連接」標題字段。 Nginx的配置應該是這個樣子:

upstream http_backend { 
    server 1.1.1.1:80; 

    keepalive 16; 
} 

server { 
... 

location/{ 
     proxy_pass http://http_backend/; 
     proxy_http_version 1.1; 
     proxy_set_header Connection ""; 
    ... 
    } 
} 

我抓傷我的頭相當長的一段時間這個問題,但對我來說,上述工程。請注意,如果您需要代理HTTPS流量,則需要單獨的上游模塊。再澄清一點,「keepalive 16」;指定代理允許保留的上游同時連接的數量。根據網站上同時訪問者的預期數量調整數量。

+0

謝謝,這個作品。我還添加了proxy_set_header主機,X-Real-IP,X-Forwarded-For;到「位置/」標籤。 – pincoded 2016-03-18 12:02:35

相關問題