2010-04-06 71 views
0

我有一個WCF Web服務,我想使用基本身份驗證。我迷失在身份驗證選項中:IIS管理器與web.config與system.serviceModel的身份驗證設置

  • 在IIS 6管理器中,我可以訪問網站的屬性並設置身份驗證選項。
  • 在網站的web.config文件,system.web下,有一個<authentication mode="Windows"/>標籤
  • 在網站的web.config文件,system.serviceModel下,我可以配置:

     
    <wsHttpBinding> 
        <binding name="MyBinding"> 
        <security mode="Transport"> 
         <transport clientCredentialType="Basic"/> 
        </security> 
        </binding> 
    </wsHttpBinding> 
    

這三者有什麼區別?每個應該如何配置?

一些情況:我有一個簡單的網站項目,其中包含一個單一的.svc Web服務,我希望它使用基於SSL的基本身份驗證。 (另外,我希望它不使用Windows帳戶,但也許這是另一個問題。)

回答

1

前兩個實際上是關於訪問IIS6中的ASP.NET虛擬目錄或虛擬應用程序 - 這基本上與WCF無關(WCF實際上不是部分也不依賴於ASP.NET)。這些設置控制如何根據身份驗證處理進入IIS6 Web服務器的HTTP請求。這基本上控制着來自互聯網的匿名呼叫者是否可以在不進行身份驗證的情況下僅僅呼入,或者他們是否需要輸入用戶名/密碼,或者是否只允許在該域中具有有效Windows身份的呼叫者進入。

唯一原因對你的WCF服務有意思的是,當你在IIS中託管WCF服務時(只有其中一個選項),那麼你有一個(myservice).svc文件需要駐留在虛擬目錄中。當然,訪問該SVC文件是由IIS6/ASP.NET的身份驗證設置控制的。

<wsHttpBinding>部分中的安全模式是WCF服務如何與其客戶端通信的安全相關定義。 Mode = Transport意味着,您正在保護實際的傳輸層 - 通常使用SSL - 而不是單獨的每條消息。這種設置在Intranet場景中非常有用,在這種場景中,所有客戶端都位於企業防火牆之後 - 但在Internet環境中,它不會工作得很好,因爲您無法真正控制客戶端(此星球上的任何地方)一系列中介跳到你的服務器 - 你不能。在這種情況下,您必須使用Mode = Message,它基本上對通過電線傳遞的每條消息進行加密和簽名 - 可以在從原點到服務器的任何路徑上繼續工作。

+0

這爲我澄清了幾件事。但我不確定你的最後一點:我認爲Mode = Transport意味着SSL,SSL在互聯網的路由器上工作得很好。無論如何,我最終關閉了IIS和WCF身份驗證,並使用http://custombasicauth.codeplex.com實現自定義基本身份驗證。 – 2010-04-09 11:53:21

0

前兩項是相關的,如果它們不匹配,您的服務將無法激活。如果您選擇Windows身份驗證顯然有一個假設,您將被綁定到Windows域或本地計算機。

由於您將要進行SSL基本身份驗證,您將設置爲「無」,然後配置您的傳輸安全性。

Your one stop shop for setting up transport + basic authentication

MSDN Article on Transport+Username + Windows Forms

我不知道,如果你還在規劃出你將如何做安全,但我會建議考慮使用信息安全與運輸(向信息安全的個人偏見) ..

Transport vs Message Comparison

Patterns & Practices on Message and Transport Security