2010-06-29 62 views
0

調用WCF Web服務,我有以下設置:錯誤407,當通過Windows的認證代理

  1. 服務器計算機上運行通過要求Windows身份驗證的IIS應用暴露的WCF服務。
  2. 需要Windows身份驗證的代理服務器(Squid)。
  3. 運行Windows服務的客戶機,它嘗試通過代理服務器連接到WCF服務。該服務使用域帳戶憑據進行設置。

所有的機器都在同一個域中。 如果我放棄從設置代理服務器,並設置只是在客戶端安全綁定以下屬性,一切運作良好:

  1. SECURITYMODE = TransportCredentialOnly
  2. Transport.ClientCredentialType =的Windows

連接已成功完成,並將正確的憑據傳遞給服務器。

如果我添加代理但在代理服務器上刪除所需的Windows身份驗證,則一切正常。我在這裏改變對安全綁定唯一設置是:

ProxyAddress = http://myproxyserver:3128

我可以看到來電去通過代理服務器使用正確的憑據。

問題是,當我在代理服務器上設置Windows身份驗證要求時,代理服務器返回407錯誤。當我檢查日誌文件時,我可以看到沒有第二次嘗試用正確的證書來響應407錯誤。我添加的設置是:

Transport.ProxyCredentialType =的Windows

事情我嘗試和沒有工作:

  1. 集UseDefaultProxy - 因爲這是一個Windows服務,它不接受默認代理。
  2. 在ClientCredentials.Windows(包括域)中手動設置Windows憑據。
  3. 在app.config和machine.config中添加默認代理。

關於正在發生的事情以及如何解決它的任何想法?

回答

0

兩件事情可能是問題所在。首先,我無法確定這一點,因爲我還沒有嘗試使用Windows憑據TransportCredentialOnly,,因爲傳輸安全性傾向於是點對點的。這意味着中間服務(例如代理服務器)必須驗證您的傳輸憑證本身,並重新建立適當的憑證,以便將其請求重複發送到真正的端點。再一次,我不確定這是如何與Windows憑證協同工作的......但鑑於這是一種傳輸級別的安全設置,我懷疑它可以通過代理而無需額外的設置,以確保代理重複相應的憑證。 (請記住,這樣做會有效地取消您在代理服務器上的安全性......這在受控設置中不是問題,但可以處於真實世界的場景中。)

其次,用於綁定配置的security元素的transport子元素應具有proxyCredentialType設置。如果您的代理干擾您的安全,您可能需要對代理本身進行身份驗證。 proxyCredentialType設置定義了什麼樣的代理憑證用於對代理本身進行身份驗證。然後,您需要在發送消息之前提供代理憑據。