2010-11-17 102 views
4

系統規格: 使用.NET 3.0的C#客戶端。在App Servers上作爲Windows服務託管的WCF服務。用於數據存儲的MSSql Server 2008R2 DB。安全驗證客戶端到服務器

用戶密碼的散列存儲在數據庫中用於認證用戶。我的問題是,我不知道如何使用客戶端密碼的散列來安全地認證客戶端到服務器。

在閱讀了關於SO的類似問題之後,我看到推薦了一個挑戰 - 響應機制。有人能給出如何做到這一點的好的編碼例子嗎?另外,如果我們可以安全地在服務器上生成私鑰 - 公鑰對並將公鑰分配給所有客戶端,那麼將使用公鑰加密來傳遞來自客戶端和服務器的信息就足夠了,而不是使用質詢 - 響應。

編輯:通過客戶端我的意思誰是真正在

+0

客戶端是指使用客戶端或客戶端應用程序本身的用戶。也適用於所有的Windows環境,即客戶端與服務位於同一個AD域,並使用net.tcp或http傳輸。 – softveda 2010-11-17 21:43:50

+0

@ user428468:您已經有適當的驗證方案了嗎?並正在尋找一種在認證過程中保護通信的方式? – 2010-11-17 21:49:12

+0

@Pratik:他們沒有進行任何Windows憑據身份驗證:「用戶密碼的哈希存儲在數據庫中用於驗證用戶。「 – 2010-11-17 21:50:00

回答

0

如果客戶端和服務器在同一個AD域上,最簡單的選擇是使用帶有AD身份驗證的net.tcp傳輸。用戶kerberos令牌被呈現給服務並且可以使用AD角色進行認證。
如果您不能使用集成AD身份驗證和需要使用方案,您可以使用自定義的用戶名validator

2

使用SSL爲您的客戶端服務器通信和公用密鑰使用客戶機登錄的用戶(又名非對稱)加密的照顧。你不需要自己編碼just configure it to use SSL

+0

SSL不提供任何認證如果你有很多用戶,我不會推薦它,特別是因爲WCF服務不在IIS中託管,但windows服務,客戶端證書不是微不足道的設置。 – softveda 2010-11-17 21:42:55

+0

@Pratik :是的,SSL只保證通信安全,OP的問題(我認爲)是問如何保護他們現有的身份驗證方法,下面的語句證明他們已經在執行自定義身份驗證:'用戶密碼的哈希存儲在數據庫中爲了驗證用戶的身份,他們可能只是想保護它。 – 2010-11-17 21:48:14

0

的過程是這樣的: -

服務器產生一個Challenge發送給客戶端。例如X

在客戶端

passwordHashed =哈希(密碼) challengeHashClient =加密(X,passwordHashed)// passwordHashed是關鍵

發送challengeHashClient到服務器。

在服務器

從數據庫中獲得 challengeHashServer =加密(X,passwordhashed)passwordhashed

比賽challengeHashServer與challengeHashClient

還必須有此操作,以防止重放攻擊超時。

但是,如果您使用Windows環境,爲什麼不考慮使用Windows Kerberos身份驗證?