无需输入电子邮件进行密码重置(ASP.NET身份验证)

4

当前ASP.NET身份验证密码重置(通过电子邮件验证)需要用户输入电子邮件和新密码进行重置。然而,在大多数密码重置的情况下,只需要一个新密码。如何做到这一点?

我发现可以通过电子邮件找到用户ID,例如:

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

能否直接从密码重置的回调URL中获取用户ID呢?因为它包含了用户ID。或者是否有更好的替代方法?


1
在大多数密码重置的情况下,仅需要新密码是不够安全的。更安全的方法是在密码重置之前使用电子邮件地址作为用户身份验证的手段。 - GVashist
2个回答

0
过去我是这样处理的,将重置密码URL与带有超时的重置密码函数相关联。
工作流程:
用户点击忘记密码 > 发送包含GUID的链接的电子邮件 > 电子邮件所有者单击链接 > asp.net页面从URL读取GUID > 页面检查请求是否仍在超时限制内 > 用户输入新密码并确认。

-1

你将如何验证尝试重置密码的人是密码重置所针对的账户的所有者?需要用户名或电子邮件来确定您正在为谁重置密码,并且发送到电子邮件的密码重置链接是一项安全要求,而不仅仅是“功能”。

强烈推荐阅读有关此主题的文章(不长,但非常有用)Troy Hunt:关于构建安全密码重置功能的所有内容


这是一篇不错的文章。然而,这是我需要解决的需求。也就是说,我必须想出一个解决方案来允许用户在不输入电子邮件地址的情况下重置密码。 - eulercode
1
@eulercode 你可能需要与客户谈论这个要求,并强烈反对所提出的做法。他们可能没有意识到他们正在要求在应用程序中创建一个安全漏洞。 - trailmax
重置密码需要用户名或电子邮件地址中的一个,或者是与电子邮件相关联的唯一且不易猜测的 GUID。 - RandomUs1r

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