我有一个服务(WCF),我的ASP.NET页面将与之通信。 WCF服务在其数据存储中实际存储了密码(实际上是一个文件)。 WCF服务在每次调用时都需要用户名和哈希密码。
现在我遇到的问题是,如果我在ASP.NET中使用表单身份验证对用户进行身份验证,则在用户通过身份验证后,cookie将保存在用户的计算机中,但我想保存用户名和哈希密码这样,用户也可以使用WCF服务。应该在哪里保存这些信息,以确保安全可靠?
我应该使用会话变量吗?如果我选择该选项,那么我应该从基于表单的身份验证切换并使用会话变量手动进行身份验证或使用基于表单的身份验证进行网页访问并在会话中存储用户名和哈希密码变量?各自的优点和缺点是什么?
答案 0 :(得分:0)
您可以将用户名和密码(当然是哈希)存储在另一个cookie中吗?每次通信时,抓取cookie并将其与用户名一起发送到WCF服务。
在WCF服务端,您将拥有用户名和哈希用户名/密码组合。如果你应用相同的散列,你最终应该得到你在WCF端存储的相同字符串,如果它们匹配,那么用户是有效的。
关注您的修改:
不确定他们之间是否有很多区别,因为你的建议。如果使用表单身份验证,则会创建会话变量并(假设您正在使用cookie)存储cookie,该cookie允许会话变量与用户关联。因此,即使使用表单身份验证,您仍然使用会话变量。
唯一的问题是,您是否希望将用户输入的密码的哈希版本存储在会话/ cookie中。专业人士认为它存储在某个地方,可能会带来安全风险。
完全替代的方法是在每次请求时发送密码和重新身份验证,而不是发送与用户密码无关的身份验证令牌。改为验证此令牌。
成功登录后可以发出令牌,并且应该使用与WCF相同的散列算法。发送用户名和令牌作为请求的一部分,并验证它是有效的,已授权的还是最新的。
答案 1 :(得分:0)
绝对不在客户端(cookies)。使用cookie来验证用户对ASP和会话ID的身份。这是ASP.NET的默认值。比在会话中存储用户名和PW。
考虑使用Windows身份验证或其他推荐的机制,因为它们会带来更多安全性。
@your edit:我建议继续使用表单身份验证以及相关控件(或ASP.NET中的任何其他预先实现的方法)。自己重新实现它会毫无理由地产生大量的优势 - 至少如果你想获得与.NET身份验证带来的相同的安全性。它真的不仅仅是比较哈希密码..!此外,使用会话,因为这是存储任何其他用户相关数据的自然场所。再次 - 会话很容易配置,相对安全。