1

我试图了解 ASP.NET MVC 中的身份验证是如何工作的。我不希望内置的 MembershipProvider 在幕后创建本地数据库。我还查看了一些关于自定义会员提供程序的博客文章。在寻找更简单的表单身份验证模型时,我发现了以下内容:

FormsAuthentication.SetAuthCookie("myusername", true);
FormsAuthentication.SignOut();

这个想法是将用户名和加盐哈希密码发送到数据库,看看它们是否匹配那里的记录。如果用户存在,那么我将用户名传递给 SethAuthCookie。我的问题是:

  • 用户名应该加密吗?
  • 如果有多个服务器并且用户正在浏览网站会发生什么?我相信任何一台服务器都可以为用户提供内容,那么他​​们如何知道用户是否已通过身份验证?
  • 在没有提供者的情况下,在 MVC 中验证用户的首选方式是什么?我是在正确的轨道上还是应该寻找其他东西?
4

1 回答 1

3

用户名应该加密吗?

不。

如果有多个服务器并且用户正在浏览网站会发生什么?我相信任何一台服务器都可以为用户提供内容,那么他​​们如何知道用户是否已通过身份验证?

在每次请求时,服务器都会读取客户端浏览器发送并由FormsAuthentication.SetAuthCookie调用生成的身份验证 cookie,对其进行解密并检索存储在其中的用户名。只需确保您为服务器场的所有节点设置了相同的机器密钥,这样无论哪个节点发出身份验证 cookie,所有其他节点都可以解密它。

在没有提供者的情况下,在 MVC 中验证用户的首选方式是什么?我是在正确的轨道上还是应该寻找其他东西?

你在正确的轨道上。FormsAuthentication.SetAuthCookie一旦您验证密码哈希与数据库中的用户匹配,您就可以使用该方法发出身份验证 cookie,并且在后续操作中,您可以使用该User.Identity.Name属性来检索当前经过身份验证的用户。

我还建议您查看以下文章,该文章很好地概述了表单身份验证在 ASP.NET 中的工作原理。

于 2012-04-23T06:09:34.657 回答