ASP.Net在会话cookie中存储用户密码?
我知道会员提供商将用户名和过期时间存储在加密的cookie中,然后使用它来验证用户是否仍然登录进行会话。ASP.Net在会话cookie中存储用户密码?
是否可以将用户密码存储在此加密的cookie中。如果是的话,你将如何访问它的服务器端?
我需要用户的用户名和密码可用的服务器端,因为我需要调用Web服务使用这些相同的凭据。有没有更好的方法来做到这一点?
您应该将其存储在会话状态中,永远不会离开服务器。
您还应该尝试将这些Web服务更改为使用身份验证票证而不是密码(例如OAuth),因为以纯文本存储密码绝不是一个好主意。
不推荐,但可以使用FormsAuthenticationTicket.UserData。
据我所知,这不是SLak推荐的东西吗?我不太了解会员提供的会话和“会话状态”之间的区别。也许没有什么区别,那就是让我困惑的东西。 – 2011-12-27 05:35:35
@metalideath。 Session Cookie与Forms Authentication Cookie非常不同。阅读Stefan Schackow书的“Forms Authentication”章节以获得完整的理解。 – 2011-12-27 05:42:46
@metalideath:这直接进入客户端上的表单身份验证cookie。我不会推荐它。 – SLaks 2011-12-27 13:42:36
是的,你可以做到这一点。您传入的FormsAuthenticationTicket构造函数的用户数据领域的编码信息:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
name, issueDate, expirationDate, isPersistent, yourEncodedData);
string secureTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));
理想的情况下,这应该通过SSL连接来完成,而票饼干应与中HTTPOnly和安全属性标记。
然后,检索值:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;
你也可以只设置自己的cookie,从窗体身份验证票证分开。
但是,从安全角度来看,即使加密,直接在cookie中存储密码也不是一个好主意。相反,使用会话状态:
Session["password"] = password;
会话状态也使用cookie,但cookie本身只包含密钥。服务器使用密钥来获取该会话唯一的键/值对的字典,该字典保留在服务器上(或者根据配置如何序列化到数据库)。
感谢您使用会话状态的示例,+1 。 – 2013-08-09 16:06:03
当我第一次验证用户时,会将它们保存到会话状态吗?您如何确保会员会话与会话状态同时过期?我相信,我需要他们保持同步。 – 2011-12-27 03:53:58
@metalideath - 是的,尽快将它们储存起来。如果会话结束,无论是由用户清除其cookie(并因此丢失对会话的任何引用)或服务器超时会话,您需要重新验证用户身份并再次在会话中恢复密码。 – Omar 2011-12-27 05:21:05
会话状态在多服务器环境中工作吗? – 2011-12-27 23:05:10