2012-03-11 68 views
0

我一直在閱讀關於WCF安全一整天,並不能說我很滿意它。WCF安全 - 新手問題 -

我已經開發了一些WCF服務,並將它們部署到測試服務器並可以從客戶端調用。雙方C#/ VS 2010.這些服務託管在IIS 6下。目前無法選擇更近的時間。

所以 - 我讀過,我只能使用HTTP與IIS 6 - 我認爲限制我basicHttpBinding或wsHttpBinding作爲綁定。

我也讀過使用wsHttpBinding通過電線發送的XML被加密,而basicHttpBinding不是。

所以它看起來像我想用wsHttpBinding去,因爲我想要某種身份驗證,我想用戶名/密碼將與傳入消息一起傳遞。

第一個問題是 - 如果我使用wsHttpBinding,客戶端是否必須使用https調用?然後我需要擔心服務器上的證書等嗎?

第二個問題是 - 我有哪些安全選項?請求調用者必須是服務器上的Windows用戶,還是可以創建自己的用戶名/密碼,並讓服務和服務的這一部分進行驗證,並且與Windows用戶無關?如果我必須去Windows用戶,我想在服務器上設置一個用戶帳戶是很常見的,並讓所有的用戶都使用它?

基本思想是我需要打開此服務給選定的呼叫者,但不希望任何人都能夠發現服務並調用它。我需要以某種方式控制呼叫該服務的人。用戶名/密碼是這樣做的標準方式嗎?我能否定義一個GUID,例如哪些呼叫者必須通過?

回答

0

回答你的第一個問題。 wsHttpBinding不需要需要 HTTPS。如果將SecurityMode設置爲消息或無,則可以使用HTTP。但是,由於您打算通過服務電話發送用戶名和密碼,因此絕對不應這樣做。如果你這樣做,那麼任何人都可以查看傳輸中的消息並閱讀用戶名和密碼,並且安全性完全受損。恐怕您必須獲得證書並使用HTTPS。這並不是那麼糟糕,網絡上有很多資源可以幫助你。

順便說一下,您可以使用basicHttpBinding和wsHttpBinding進行HTTPS。另外,你應該考慮使用REST來簡化。 WCF對它有很好的支持(webHttpBinding),更好地支持Web API

在回答第二個問題時,您不需要呼叫者是服務器上的Windows用戶,並且可以使用用戶名和密碼。這被稱爲基本認證。再一次,網絡上有很多關於它的內容。開始here

如果你這樣做,你顯然必須有一個數據庫來存儲用戶名和密碼,以便你可以驗證然後授予或拒絕訪問你的服務。用WCF實現這個最簡單的方法是使用默認的membership providers之一。

+0

嗨邁克,感謝您的快速回復。我不明白的一件事是你說我可以使用HTTP並將securityMode設置爲消息 - 在這種情況下是不是加密的消息?我會研究這個基本認證。還有一件事情還不清楚 - 如果我可以以同樣的方式確保basicHttpBinding,爲什麼我會選擇wsHttpBinding?不會basicHttpBinding給我一個更大的範圍?我不在乎什麼技術給我打電話,只要我可以認證來電者。再次感謝,Ray – RBrowning99 2012-03-11 20:37:23

+0

隨着郵件安全性,郵件正文被加密。你仍然需要一個證書,它也可以比HTTPS提供更慢的性能。它主要用於在到達目標服務之前在多箇中介之間轉發消息的複雜場景。 wsHttpBinding和基本的HttpBinding都是SOAP綁定。 basic只支持基本的SOAP,但wsHttpBinding支持幾種基於SOAP的WS- *協議,例如,可靠的信息等。如果你不需要這些高級功能,基本上可以讓你更好的覆蓋。 REST會給你更廣泛的範圍,但... – 2012-03-11 21:02:37

+0

爲邁克喝彩。我有一些與basicHttpBinding和securityMode = Transport。我用sslDiag做了一個自己的證書。我想我的下一步是設置clientCredentialType = Basic - 然後我看到客戶端必須通過用戶名。如果服務不是Windows用戶,我該如何在服務中攔截並驗證它?謝謝Ray – RBrowning99 2012-03-12 00:16:22