2010-08-17 59 views
2

我們有一些調用WCF服務來訪問數據的應用程序(web和WPF)。我們沒有使用Windows身份驗證。登錄到Web應用程序或WPF桌面應用程序時,會提示用戶輸入用戶名和密碼。數據不是高度機密的(即沒有信用卡,SSN等)。WCF內聯網安全配置

我們想爲WCF端點使用BasicHttpBinding。但是,我們希望將用戶名和密碼傳遞給我們的WCF服務,以便我們可以根據用戶限制對某些數據的訪問。

我的問題是,因爲我們在Intranet環境中是100%,所以簡單地將用戶的用戶名和密碼傳遞給SOAP消息頭是合理的,以便我們可以在WCF端驗證用戶身份?這似乎是一種非常常見的情況,我很好奇其他人在所有應用程序和服務駐留在Intranet環境中時如何解決WCF方面的安全問題。

謝謝。

回答

2

這似乎是非常容易的任務,但實際上它很難,因爲WCF團隊已經決定不允許通過不安全的通道發送純文本用戶名令牌。您始終可以在自定義SOAP標頭中發送用戶名和密碼,但在這種情況下,您將失去WCF安全基礎結構,並且必須注入自己的密碼驗證行爲等。

如果您確實需要純文本用戶名令牌,則應該檢查這個binding

編輯:順便說一句。請記住,大多數安全攻擊來自內部人員,所以使用HTTPS並不是什麼壞事,它會讓事情變得更容易。

+0

我想這是一種折衷......我是否通過保持簡單的安全來簡化開發並提高性能,還是因爲擔心可能有一天會成爲流氓員工而使用HTTPS和wsHttpsBinding來增加開發複雜性並略微降低性能? – ChrisNel52 2010-08-17 20:50:59

+1

在這種情況下,您不會簡化開發。使用HTTPS很簡單。避免HTTPS意味着解決方法。 – 2010-08-17 21:23:33

1

是的,這是合理的 - 但是:即使您在Intranet上,也應該加密密碼。任何使用網絡嗅探器的人(如WireShark)都可以看到通信文本,如果您還沒有加密密碼,那麼即使他們是員工,他們也可以獲取密碼 - 徹底擊敗任何內部安全性 - 也就是說,除非您非常信任您的員工,否則無論如何用戶名和密碼確實沒有任何意義。

+0

我總是與這種情況鬥爭。例如,WPF桌面應用程序將提示用戶輸入密碼。這意味着在我們將密碼從WPF應用程序傳遞給WCF服務之前,我們應該加密它。但是,我在哪裏將加密密鑰存儲在用戶的桌面PC上?我不想將它存儲在app.config文件中。 – ChrisNel52 2010-08-17 20:45:10

0

密碼不應以純文本形式發送。有些人對不同的事物使用相同的密碼。竊取某人的密碼可能會導致嚴重的身份盜用案例,即使您的應用程序永遠不會受到影響(受害者甚至不知道泄露的來源)。

有一個原因密碼被哈希 - 即使電腦不應該知道你的密碼

1

如果您使用wcf 3.5 sp1,您可以允許用戶名和密碼通過無安全綁定,只需將安全傳輸的AllowInsecureTransport設置爲true即可。