簡體   English   中英

WCF用戶身份驗證最佳做法

[英]WCF User Authentication Best Practices

我正在編寫一個使用WCF以便與Web服務通信的應用程序。 數據庫還用於存儲與用戶相關的數據,例如憑據。 數據庫中的密碼是哈希+加鹽的。

用戶必須使用提供給他的用戶名和密碼手動登錄。 然后,應用程序使用代理以便與負責身份驗證的Web服務進行通信。 然后,Web Service將檢查用戶是否存在並將數據返回給客戶端,然后由客戶端顯示數據。 否則,如果憑據無效或服務器不可訪問,則會顯示錯誤。

我的問題:

  • 為了減少Web服務完成的工作量,我希望身份驗證過程由客戶端完成。 換句話說,客戶端向Web服務發送用戶名,然后Web服務將在數據庫中檢查“用戶”表中是否存在該用戶名的條目。 如果是這樣,Web Service會將散列和加鹽的密碼(從數據庫)返回給客戶端。 然后,客戶端會將用戶輸入的密碼與獲得的哈希密碼/加鹽密碼進行比較。 不進行解密,僅使用相同的鹽字節對輸入的密碼進行哈希處理,然后比較密碼。

    這是可以接受的行為嗎?

  • 如果在數據庫中找不到提供的用戶名,我應該如何進行? 服務器是否應該引發異常,然后由客戶端處理? 還是應該將身份驗證部分分為兩個步驟:

    1)確保用戶存在。

    2)從數據庫中獲取加密的密碼。

    然后,第一步將返回某個值,該值被客戶端理解為“用戶不存在”的含義(例如:布爾值“ False”)。

我對您的方法的主要反對意見是,您希望讓客戶決定他是否通過身份驗證。

不要那樣做!

因為在這種情況下,任何惡意攻擊者都可以始終聲明自己已通過身份驗證(只是基本上忽略了服務器對第一個調用的響應),然后訪問您的系統!

關於是否允許客戶敲門的決定必須掌握在您的手中 -例如,您絕對必須在后端/服務器端執行此操作。

永遠不要讓客戶做出決定!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM