存储用户名和密码ASP.NET身份验证

存储用户名和密码ASP.NET身份验证,asp.net,wcf,authentication,Asp.net,Wcf,Authentication,我有一个服务WCF,我的ASP.NET页面将与之通信。WCF服务在其数据存储文件中对密码进行了哈希处理。WCF服务在每次呼叫时都需要用户名和哈希密码 现在我遇到的问题是,如果我在ASP.NET中使用forms authentication对用户进行身份验证,则在用户进行身份验证后,将在用户的计算机中保存cookie,但我也想保存用户名和哈希密码,以便用户能够使用WCF服务。应将此信息保存在何处,以确保其安全 我应该使用会话变量吗?如果我选择该选项,那么我应该从基于表单的身份验证切换到使用会话变量

我有一个服务WCF,我的ASP.NET页面将与之通信。WCF服务在其数据存储文件中对密码进行了哈希处理。WCF服务在每次呼叫时都需要用户名和哈希密码

现在我遇到的问题是,如果我在ASP.NET中使用forms authentication对用户进行身份验证,则在用户进行身份验证后,将在用户的计算机中保存cookie,但我也想保存用户名和哈希密码,以便用户能够使用WCF服务。应将此信息保存在何处,以确保其安全


我应该使用会话变量吗?如果我选择该选项,那么我应该从基于表单的身份验证切换到使用会话变量手动进行身份验证,还是同时使用基于表单的身份验证进行网页访问,并将用户名和哈希密码存储在会话变量中?每种方法的优点和缺点是什么?

您可以将散列的用户名和密码存储在另一个cookie中吗?每次通信时,抓取cookie并将其与用户名一起发送到WCF服务

在WCF服务端,您将拥有用户名和哈希用户名/密码组合。如果应用相同的散列,那么最终应该得到存储在WCF end中的相同字符串,如果它们匹配,则用户是有效的

关于您的编辑:

正如你所建议的,我不确定它们之间有多大区别。如果您使用表单身份验证,将创建一个会话变量,并且假设您使用的是cookie,则将存储一个cookie,以允许会话变量与用户关联。因此,即使使用表单身份验证,您仍然在使用会话变量

唯一的问题是,是否要将用户输入的密码的哈希版本存储在会话/cookie中。其优点是它被存储在某个地方,这可能会带来安全风险

另一种完全替代的方法是发送与用户密码无关的身份验证令牌,而不是在每次请求时发送密码和重新身份验证。改为验证此令牌


令牌可以在成功登录时发出,并且应该使用与WCF相同的哈希算法。将用户名和令牌作为请求的一部分发送,并验证其是否有效、已授权且仍然是最新的。

客户端cookie上绝对没有。使用cookie将用户验证为ASP和会话ID。这是ASP.NET默认设置。然后在会话中存储用户名和PW

考虑使用Windows身份验证或其他推荐的机制,因为它们将带来更多的安全性


@编辑:我建议继续使用表单身份验证以及相关控件或ASP.NET中任何其他预实现的方法。你自己重新实现它会无缘无故地大做文章——至少如果你想获得与.NET身份验证相同的安全性的话。这真的不仅仅是比较散列密码。。!另外,使用会话,因为这是存储任何其他用户相关数据的自然场所。同样,会话配置简单且相对安全

如果cookie是散列的,并且没有有效的用户名就不能使用,并且在不知道salt的情况下就不能使用,那么为什么不将其进行cookie呢?因为它会不必要地将敏感信息暴露到不安全的通道中。就我阅读的问题而言,通信只在ASP页面服务器端和WCF之间进行。因此,客户端不需要直接与服务通信。客户端应该只有真正需要的信息。你能详细说明如果我使用令牌而不是散列密码,我会有什么好处吗?我仍然需要将令牌保存在会话或cookie中的某个位置。您可以在不更改用户密码的情况下使令牌无效,用户的密码可能与他们在任何地方使用的密码相同。如果其他用户泄露了用户的令牌,他们所能做的就是访问您的API,如果他们破解了密码,他们可能能够登录到用户的netbank。