2010-11-23 61 views
1

我有一個Silverlight 4應用程序,它與WCF服務進行通信。用戶需要登錄才能訪問WCF服務。在Silverlight 4中保存用戶登錄

現在我想阻止用戶每次啓動Silverlight應用時都重新輸入用戶名和密碼。達到此目的的最佳方法是什麼?我想過cookies來保存用戶名/(散列)passowrd,但cookies不能處理Unicode,並且密碼保存爲Unicode。

你會建議什麼?

由於提前,
弗蘭克

回答

2

那麼你可以做一些事情像首次登錄後,其保存在加密格式憑據的獨立存儲。當SL開始提取並通過服務驗證然後登錄。

+0

IS似乎是一個不錯的選擇,謝謝! – Aaginor 2010-11-24 11:12:16

0

既然這是一個Silverlight應用程序,爲什麼不讓ASP.NET爲您處理身份驗證呢?您仍然可以確保您的WCF服務僅與經過身份驗證的用戶一起工作。 Here's an excellent article on the subject.

編輯

我要指出,在這篇文章中筆者將自定義消息頭的用戶名/密碼。我只是用檢查HttpContext.Current.User是否通過驗證來取代該邏輯,如果是,則允許訪問該服務。

1

另一種方法是存儲GUID(如果可用)。

例如,如果你的數據庫模式看起來是這樣的......

user_id (UniqueIdentifier, primary key) 
username (varchar) 
password_hash (varchar) 
password_salt (varchar) 

然後我會存儲在IsolatedStorageuser_idusername。當用戶返回這些變量時,會傳遞給WCF服務中的一個特殊功能來進行身份驗證。

只要user_id永遠不會顯示給用戶,那麼這可以是一個安全的方法,不會損害密碼。順便說一下,我最初爲使用OpenID的網站提出了這個想法,因此沒有密碼。

+0

當我散列用戶密碼(SHA256)時,爲什麼需要唯一標識符?我可以看到攻擊者獲得散列pwd和GUID沒有區別。有了這兩個信息,她就可以訪問應用程序,並且她無法知道用戶使用的密碼,或者我錯了嗎? – Aaginor 2010-11-24 11:46:56