C# · 12月 22, 2021

c# – 通过电子邮件恢复/重置丢失的密码选项

我正在使用DefaultMembershipProvider开发一个C#ASP.MVC 4项目,我正在尝试用一种用户友好的方式来恢复/重置丢失的密码.

我的第一次尝试是让用户提供他们的用户名(这是一个有效的电子邮件地址),然后应用程序将生成随机密码(符合我们的要求),然后将密码通过电子邮件发送给用户.

我的理想解决方案是当用户点击忘记密码按钮时.系统会询问他们的用户名,这些用户名在提供时会导致电子邮件与URL一起发送(此URL也会附加到期日期).此解决方案还会重置应用程序内的用户密码(在发送电子邮件之前).当用户单击URL时,它们会自动登录并发送到更改密码表单.这个解决方案有问题吗?

对于配置,我设置了以下值:

<membership defaultProvider=”DefaultMembershipProvider”> <providers> <clear /> <add name=”DefaultMembershipProvider” type=”System.Web.Providers.DefaultMembershipProvider,System.Web.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35″ connectionStringName=”DefaultConnection” enablePasswordRetrieval=”false” enablePasswordReset=”true” requiresQuestionAndAnswer=”false” requiresUniqueEmail=”false” maxInvalidPasswordAttempts=”5″ minrequiredPasswordLength=”6″ minrequiredNonalphanumericCharacters=”0″ passwordAttemptWindow=”10″ applicationName=”/” /> </providers></membership>解决方法 首先,这里有两个必读[我再说一遍,必读]:

> Everything you ever wanted to know about building a secure password reset feature
> You’re Probably Storing Passwords Incorrectly

话虽如此,OWASP有一些关于如何实现身份验证的指导,您可以在他们的Authentication Cheat Sheet开始,对于您的特定情况Forgot Password Cheat Sheet.这也可以说是必读.如果你不打算关注OWASP,我希望这是因为你决定,而不是因为你不知道更好.

无论如何,最好的摘要是后面的图像(取自上面的第一个链接),如果你只想记住一件事,就这样: