无需输入电子邮件即可重置密码(ASP.NET 身份)

Posted

技术标签:

【中文标题】无需输入电子邮件即可重置密码(ASP.NET 身份)【英文标题】:Password reset without entering email (ASP.NET Identity) 【发布时间】:2015-02-06 15:23:45 【问题描述】:

当前的 ASP.NET Identity 密码重置(通过电子邮件验证)需要用户输入电子邮件并重置新密码。但是,在大多数密码重置的情况下,只需要一个新密码。这怎么可能?

我通过获取邮件发现用户id,例如:

var user = await UserManager.FindByNameAsync(model.Email);

是否可以直接从密码重置的 CallbackUrl 中获取用户 ID,因为它包含用户 ID?还是有更好的替代方法?

【问题讨论】:

“在大多数情况下密码重置,只需要新密码”。不对。更安全的方法是在密码重置之前使用电子邮件地址对用户进行身份验证。 【参考方案1】:

我过去处理此问题的方法是将重置密码 URL 与重置密码函数关联起来并设置超时。

工作流程:

用户点击忘记密码 > 发送包含 GUID 链接的电子邮件 > 电子邮件所有者点击链接 > asp.net 页面从 URL 读取 GUID > 页面检查请求是否仍在超时限制内 > 用户输入新密码 &确认。

【讨论】:

【参考方案2】:

您将如何验证尝试重设密码的人是为其完成密码重设的帐户的所有者?需要用户名或电子邮件才能知道您正在为谁重置密码,并且发送到电子邮件的密码重置链接是一项安全要求,而不仅仅是一项“功能”。

强烈推荐阅读该主题(不长,但非常有用)Troy Hunt: Everything you ever wanted to know about building a secure password reset feature

【讨论】:

这是一篇好文章。但是,这是我需要解决的要求。这意味着我将不得不提出一个解决方案,让用户无需输入电子邮件即可重置密码 @eulercode 您可能想与您的客户讨论此要求,并强烈建议您不要采用建议的做法。他们可能不知道他们要求在他们的应用程序中创建一个安全漏洞。 需要用户名或电子邮件才能知道您正在重置密码的谁

以上是关于无需输入电子邮件即可重置密码(ASP.NET 身份)的主要内容,如果未能解决你的问题,请参考以下文章

快速掌握 ASP.NET 身份认证框架 Identity - 通过邮件重置密码

Asp.Net Identity 2 无法重置密码明文?

如何以管理方式为忘记密码的 ASP.net 身份用户设置新密码?

ASP.NET Core Identity - 使令牌(电子邮件确认、密码重置等)在不同服务器上有效?

重置 ASP.NET 密码 - 安全问题?

ASP.NET MVC 中密码重置的最佳实践