2009-11-26 225 views
0

我有一個WCF服務,將需要接收客戶端憑證,並保持某種形式的基於角色的數據的基礎上,我的身份驗證方法。WCF - 在頭中配置客戶端/服務器身份驗證?

客戶端將駐留在許多不同的系統,因此,每個客戶都會有一個唯一的用戶ID和PW。

我正在使用basicHttpBinding並閱讀了一些描述該過程的文章,例如這一個, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/

所以,我正在尋找的是如果有人這樣來配置,以看一看,所以我可以得到這個我自己的解決方案一個完整的客戶端/服務器。

我希望做的是在標題爲每個請求通過用戶名和密碼,傳回某種SecurityTokenValidationException上失敗,或者如果繼續傳遞。

謝謝。

UPDATE

我使用的是與客戶端和服務器上的以下配置中的WSHttpBinding:

<wsHttpBinding> 
    <binding name="wsHttpEndpointBinding" > 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Basic" /> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 

並從客戶端調用外面的服務器如下:

ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient(); 

myClient.ClientCredentials.UserName.UserName = "billuser"; 
myClient.ClientCredentials.UserName.Password = "mypassword"; 

Response.Write("Data from WCF Service: " + myClient.GetData(1)); 

我想我需要一點點連接服務器上的CustomUsernamePasswordValidator,因爲我仍然得到「......無法啓動」。錯誤。

回答

1

是使用basicHttpBinding的滿足你的要求?該綁定實際上只是爲了支持傳統的WS-BasicProfile實現(即ASMX)。如果你的客戶也是.NET/WCF,我會強烈推薦使用wsHttpBinding,它提供了大量的開箱即用的安全選項。您可以將證書,用戶名/密碼等用於傳輸和/或消息安全性,而無需自己編寫任何安全性內容。只需配置並去(CAG)。

安全證書信息可通過的OperationContext服務本身,如果你需要從代碼直接訪問它。如果你的代碼就需要訪問它,但是,我會建議寫一個行爲從的OperationContext提取相關信息,並將其放置在一些更具體的應用程序,讓你不必到處你需要查閱參考System.ServiceModel有關OperationContext的信息。

+0

當我從basicHttpBinding的切換到WsHttpBinding的(端點綁定=「的wsHttpBinding」 bindingConfiguration =「wsHttp」)我得到錯誤「的請求的服務......不能啓動。請參見服務器的診斷跟蹤日誌更多信息。」由於這是託管解決方案,因此我無法訪問日誌。 我正在通過https執行此操作。 – ElHaix 2009-11-26 02:56:47

+0

如果您使用的是https,您是否爲綁定配置了傳輸安全性?傳輸安全意味着傳輸協議加密通道。由於您使用的是https,因此您需要爲綁定啓用傳輸安全性。嘗試配置,看看它是否工作。您可能需要能夠看到完整的異常報告才能使安全工作。啓動和運行通常是一些試驗和錯誤......它並不是真正的「困難」,只是在您第一次實現端點安全性時「不明顯」。 – jrista 2009-11-26 04:54:58

+0

對於WsHttpBinding的爲客戶端和服務器,我設置安全模式=「TransportWithMessageCredential」,運輸clientCredentialType =「基本」,消息clientCredentialType =「用戶名」。所以通過錯誤信息,我知道他們正在互相交談,只是不正確:)。在進行服務調用之前,我還設置了proxy.ClientCredentials.UserName.UserName和proxy.ClientCredentials.UserName.Password(如果我沒有,那是另一個錯誤)。 – ElHaix 2009-11-26 05:03:11

相關問題