ASP.Net MVC身份验证忘记密码

4
我已经建立了一个快速页面,接受电子邮件地址并发送一封包含重置密码链接或新临时密码的电子邮件。我的项目是一个新的ASP .Net MVC项目,使用Identity进行身份验证。 我认为最好的重置方式是发送一个链接到电子邮件中,当用户单击该链接时,可以输入新密码,但我不确定链接指向的页面应该放置什么功能以保持网站安全。在这种情况下,是否最简单的方法是发送一个新的临时密码?
2个回答

1
这段内容太长了,无法放在评论中,希望我能提供实际的代码示例以避免被downvote(踩)。
一个常见的解决方案是:
当用户请求重置密码时,在用户存储区(最可能是数据库)中记录guid /随机哈希和过期的日期时间信息。
向文件中用户邮件地址发送包含临时页面链接的电子邮件(这种解决方案需要有效的电子邮件地址)。
一旦访问了临时页面,链接就可以立即过期(将过期日期设置为datetime.now,或者从用户信息中删除guid /哈希等)。
此临时页面的URL可能在查询字符串中具有记录用户的guid /哈希,因此很难在没有电子邮件中的链接的情况下找到它。为了增加安全性,可以要求用户输入请求密码重置的用户名/电子邮件(因为页面上可能没有提到用户名/密码)。完成此验证后,为用户提供相应的字段以重置其密码。
关于“忘记密码链接”的另一个注意事项,请不要提供任何关于用户名“不存在”的信息,因为这可能会导致在您的网站上查找有效用户名的可能性。
编辑:

这里有一个之前的Stack Overflow问题,可能会比我更好地解释它(不要看“被接受的”答案,看最受欢迎的答案。:)

生成临时URL以重置密码


我一直对“不要告诉他们用户名不好”的事情感到疑惑。我的意思是,如果我想这样做,只需尝试注册用户名,直到有一个被接受,这样会更容易。 - Casey
是的,没错 - "每一层小小的安全措施" 只是阻止恶意人员的另一种方式... 我之前听过有人用非常好的措辞表达过这个观点,让我看看能否找到那句话。 - Kritner
此外,并非所有的网站(至少不是我经常使用的那些)都允许开放注册,通常这项任务会委托给产品开发的业务所有者——在这种情况下,类似上述的做法会产生更大的影响。 - Kritner
是的,确实如此。这取决于使用情况。 - Casey

1

您可以在"Microsoft ASP.NET Identity Samples 2.1.0-alpha1" NuGet包的预发布版本中找到一个完整的示例,该示例使用“忘记密码”功能。

步骤

  1. 创建空Web应用程序项目
  2. 安装示例项目:Install-Package Microsoft.AspNet.Identity.Samples -Pre
  3. 启动应用程序并注册新用户。
  4. 转到登录页面,单击“忘记密码”。然后添加最近注册的用户电子邮件。

然后,您将能够调试应用程序,检查“忘记密码”过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接