如何在MVVM应用程序中处理持久登录?

时间:2012-03-03 23:32:38

标签: c# cookies httpwebrequest

我正在编写一个在加载之前显示登录表单的应用程序,它会向我之前开发的Web应用程序发送POST请求。

我可以发送登录详细信息并返回200条消息,并可以接收该请求中的数据。但是,我现在希望在应用程序关闭后存储此登录,以允许用户不必在每次打开应用程序时登录,或者在这种情况下重新启动计算机时。 (它将在启动时运行,但需要维护应用程序而不是WCF服务)

我在C#中使用HTTPWebRequest来处理对服务器的POST请求,我可以在服务器端制作cookie。如何让我的应用程序了解这些cookie并以安全的方式存储它们以允许我的整个应用程序的持久登录?我已经看了很多在C#中存储cookie的方法,比如这两个链接:

http://www.c-sharpcorner.com/uploadfile/mahesh/managing-cookies-in-a-wpf-application/

http://msdn.microsoft.com/en-us/library/dd920298(v=vs.95).aspx

然而,第一个链接中的代码给了我一个奇怪的cookie:

“CSCUser2 = test-username; android_developer_C:_width = 243px; __utma = 1.1718972007.1316996246.1316996246.1316996246.1; __ utmz = 1.1316996246.1.1.utmcsr =(direct)| utmccn =(direct)| utmcmd =(none); android_developer_reference_lastpage = /C:/AndroidSDK/android-sdk-windows/docs/reference/android/speech/RecognizerIntent.html“

所以我不确定这种方法是否最好?任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我想的CookieContainer(即MSDN链接)是设置和获取饼干(顺便说一句正确的方法:注意,你的问题无关,与WPF或MVVM图案是一般的C#/.net/ httpwebreuqest主题)。

对于可在后续会话中使用的用户计算机上的缓存凭据,有几种方法可以执行此操作。您可以将用户密码存储在安全位置,也可以存储从服务器发送给您的会话密钥。第二种方法的优点是会话密钥在时间上受限(例如一周),之后用户将不得不执行新的登录。会话密钥可以作为cookie或带有特定的API从带外服务器传送给您。 Web应用程序正在使用cookie,因为它们无权访问任何持久性存储,但您的wpf应用程序可以将密码或会话密钥存储在任何需要的位置。

我建议您使用DPAPI在用户计算机上保留机密。谷歌的c#和DPAPI看看如何在.net。