2009-09-03 52 views
1

據我所知,本書正在做所有事情,但.NET客戶端在向我的(PHP)請求發送消息時根本沒有發送身份驗證頭, SOAP Web服務。我通過在PHP結尾處記錄原始發佈數據來驗證這一點,並且.NET從不發送任何auth頭文件。如何將HTTP身份驗證證書發送到非.NET Web服務

這是我對我的ExampleWebService Web服務撥打電話之前運行代碼:

ExampleWebService.PreAuthenticate = true; 
NetworkCredential myCred = new NetworkCredential("myusername","mypassword"); 

CredentialCache myCache = new CredentialCache(); 
myCache.Add(new Uri(ExampleWebService.Url), "Basic", myCred); 
ExampleWebService.Credentials = myCache; 

據我瞭解,預認證應該強制我HTTP對每個請求發送基本認證證書,無論挑戰。這是否只適用於IIS託管服務?我沒有在任何地方發現這個文件。

,有人比我更有經驗在.NET中可以揭示出這個世界將不勝感激,因爲我靠近拉我的頭髮;-)

回答

3

HttpWebRequest類其實沒有任何光第一個請求,即使與PreAuthenticate = true發送Authorization標頭。但是,只要您使用相同的CredentialsCache實例,它將在隨後調用相同領域時發送Authorization標頭。 Some recommend adding the headers explictly

+1

是「特徵」還是「錯誤」? ;-) – jthompson 2009-09-03 23:16:16

+1

根據http://tools.ietf.org/html/rfc2617#page-5,是正確的行爲。客戶端應該從服務器獲得挑戰和* realm *,即使對於Basic也是如此。 – 2009-09-03 23:25:22

+0

由於身份驗證是可選的,所以WebService並不構成挑戰,所以我認爲這是造成問題的根本原因。其他SOAP客戶端obvioiusly沒有遵循規範的信件和暴力強制每個請求的憑據,因此我沒有遇到這個問題,直到對.NET測試 – jthompson 2009-09-03 23:52:28