2012-12-25 34 views
0

有一個winform客戶端連接到服務器並通過提供用戶名和密碼進行身份驗證。如何緩存桌面應用程序客戶端的登錄數據

用戶第一次向他的用戶名/密碼到服務器上,之後,如果沒有註銷就沒有必要得到驗證一次(如Github客戶端或Windows Live Mail

所以我想知道:

  • 哪個服務器應該返回回來,如果用戶名/密碼是有效的, 真/假值或其他什麼東西?
  • 下次運行時,如果用戶上次驗證並登錄,如何檢查 ?哪些值應該是 我確切地檢查?考慮不允許數據篡改
  • 如果我在應用程序設置中保存散列密碼,我該如何避免被另一個盜取?

(是避免升值在這裏計算器;?))

回答

1

這一切都取決於你試圖保護資源是多麼寶貴;還對誰有權訪問本地計算機等

  1. 只需緩存在應用程序中的用戶名/密碼。用戶第一次輸入用戶名/密碼時,將其保存在註冊表的某處。下一次您的應用程序開始從註冊表中讀取並將值提供給服務器。

  2. 這顯然是一個安全風險,因爲有人可以從註冊表中讀取用戶名/密碼,因此在使用類似encrypt-decrypt-string-in-net的方式將其保存到註冊表之前對用戶名/密碼進行加密。

  3. 下一個問題是您可能必須在應用程序中對解密密鑰進行硬編碼。這意味着任何能夠訪問應用程序二進制文件的人都可以計算出您正在使用的算法/密鑰,並使用該知識來解密存儲在註冊表中的密鑰。但是到目前爲止,大多數微不足道的嘗試都會被勸阻。您可以嘗試使用CryptProtectData function,因此您不必在應用中對加密密鑰進行硬編碼,但它更復雜。

+0

謝謝@Grynn。所以我把它保存在註冊表的某個地方,然後我對它進行加密。現在如果有人篡改了用戶名/密碼並輸入了隨機的用戶名/密碼,我怎麼能看到它是有效的?不需要從服務器請求 – Blazi

+0

哦,你仍然需要結束對服務器的請求,但用戶不必再輸入任何東西......所以它是無縫的。人們做的另一件事是每7天檢查一次,所以如果我驗證一次用戶/組合一次,我只會在7天后再次驗證它。 – Grynn

+0

服務器的接口應該是這樣的:「https:// server/auth」,你會發送帶有用戶名/密碼的POST,服務器會以「OK」或「FAIL」(或者可能是JSON,如{result :OK,days-since-last:3} ...) – Grynn

相關問題