2013-06-21 51 views
0

這更好奇,因爲我無法找到任何有關此現象的答案或文檔,但以下是這種情況:HTTPS請求HTTP丟棄頭部?

有2個服務/應用程序,都託管在IIS 7上。服務1收到HTTPS請求從外部來源(瀏覽器,提琴手等),並驗證它需要調用服務2的請求,所以服務1通過HTTP將它自己的,新的,單獨的呼叫傳送到服務2. 這個調用有一個授權頭被添加到請求對象。當服務2收到此呼叫時,認證標頭消失,好像被剝離一樣。因此,認證失敗,這返回到服務1,然後拒絕外部呼叫。

有沒有人有解釋爲什麼這個頭,和我在測試中看到的一些其他人不能通過HTTP調用?這是IIS或ASP.NET的行爲嗎?如果服務2的呼叫是HTTPS,那麼頭文件通過罰款。我生成這樣的請求:

string uriendpoint = "http://service.test.com/testService.svc/authtest"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriendpoint); 
request.Credentials = CredentialCache.DefaultCredentials; 
var authField = MD5Hash("test:test!!2013"); 
request.Headers.Add(HttpRequestHeader.Authorization, authField.ToString()); 
request.Method = WebRequestMethods.Http.Get; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

回答

0

我的同事遇到了這種行爲的根本原因是IIS的「URL重寫」模塊。我們設置了將http請求永久重定向到https,並且此重定向是標頭被刪除的位置。 IIS做這件事有點奇怪,但我想我會嘗試一些其他方法來解決這個問題。

0

很可能「服務2」的代碼與「如果傳入請求是HTTP忽略授權標頭」類似。這是非常合理的行爲,因爲HTTP流量可以非常容易地被嗅探和重播 - 所以誠實的服務器可以阻止呼叫者免受潛在的不安全行爲。

+0

我的意思是...我想將它放到代碼中,因爲我們無法成功驗證呼叫,因爲我們的頭文件不通過。結局,而不是隻是強制https的所有目的,但仍然沒有解釋爲什麼這些頭去了。 – Tom

+0

@Tom - 在「我查看了到達服務器2的流量並且沒有標題」或「服務器2上的請求未經過驗證」中的「Gone」?我強烈懷疑標題是「丟失」,而不是我期望它們被忽略。 –

+0

當我在本地調試它時,設置到端點的身份驗證管理器沒有任何頭傳遞給operationcontext對象。在同一個地方還有一個文件記錄器,在該狀態下被觸發並在遠程服務器上記錄該信息,從而在本地證實了我的發現。 – Tom