2015-12-18 56 views
0

我想在WCF項目中使用用戶名和密碼驗證。所以如果我沒有錯,我必須實現用戶名passowrd驗證器接口。該類具有驗證客戶端的邏輯,因此該服務使用此類來驗證客戶端。如何使用用戶名和密碼安全驗證用戶?

在我的情況下,用戶和密碼都存儲在數據庫中,所以我猜如果我使用perCall實例化服務,服務會在每個方法調用中調用數據庫來驗證客戶端,所以我認爲這是一個不好的主意,因爲執行原因。更加考慮到數據庫有一個哈希密碼,而不是密碼,所以我必須用salt對密碼進行哈希以將結果與我存儲的哈希密碼進行比較。這將是非常無益的。

行爲是這樣的,服務會從每個方法調用中的數據庫中獲取數據?

另一種選擇是在內存中存儲所有的用戶和密碼,但我不知道這是否是一個好主意,爲了安全起見在內存中存儲所有密碼,還因爲它可能需要很多的內存僅用於存儲此信息。

另一種選擇是使用會話,因爲我會有會話ID,然後我可以在內存中如果會話登錄或不會。但是,如果我沒有錯,會話用於確保軟件包按順序發送,所以我不應該使用會話進行身份驗證。

所以一般來說,我想有一些建議,以不可靠的連接和沒有會話實現身份驗證。

非常感謝。

回答

1

據我所知,當代理被打開時,用戶名&密碼被驗證,所以無論執行多少次調用,除非爲單個調用創建新的代理,否則驗證會發生一次。每次發送調用時啓動的驗證都可以通過自定義IDispatchMessageInspector引入,您將在其中檢查標頭以檢索用戶名&密碼並根據數據庫驗證它們。

+0

但是,如果我不使用會話,這是對的嗎?我的意思是,如果沒有會話,驗證只會完成一次,如果我不關閉代理? –