2012-04-14 101 views
0

問題出在這裏:我正在開發一個桌面應用程序來與服務器連接,並且客戶端必須登錄。與Skype或IM應用程序類似。我想給客戶自動登錄的選項,即。每次應用程序加載時無需輸入憑據。如何安全地爲桌面應用程序實施「自動登錄」功能?

我該如何做到這一點,同時保護客戶的信息?

謝謝,我一直在思考這個問題好幾天了,我似乎無法想出一個解決方案。在這個階段任何幫助或指導都將是黃金。

回答

1

如果你正在使用一個安全的通信通道到服務器(例如使用SSL),那麼你可以發送用戶名和密碼的散列(使用SHA-512等加密安全散列函數 - 沒有已知的可行的碰撞或原像攻擊)。

您在本地保存的是用戶名和密碼的散列。考慮到與服務器的通信通道是安全的,沒有人會看到發送的信息(不可能有重放攻擊)。使用密碼安全散列函數意味着它是單向函數,不會返回原始輸入。

另一種方法是在成功登錄後從服務器獲取身份驗證令牌。然後,協議可以在一定時間內接受與令牌相結合的用戶認證。然後,您不必在本地存儲密碼的散列,只需存儲用戶名和令牌。因此,如果有人獲得令牌,它將在某個時間點到期。但請記住,不應使用其他標記重新發布標記,只能使用正確的用戶名/密碼組合。此外,如果使用令牌登錄,則用戶不應該能夠更改/查看密碼。如果你想更進一步,那麼你也可以限制令牌只能從某個IP地址工作。

+0

但是如果可以訪問本地數據,並且在另一個客戶端上,您只需替換用戶名和散列值的值呢?如何安全地存儲本地信息? – rtheunissen 2012-04-14 10:34:39

+0

這就是令牌應該緩解的事情。但是,如果您想在本地存儲(用戶名,密碼哈希),那麼您需要使用加密技術來完成,而且無論如何都需要密鑰。 – 2012-04-14 10:51:48

+0

現在有道理,因爲只有開發者管理員才能訪問該密鑰。輝煌。 :) +1 – rtheunissen 2012-04-14 10:53:31