我正在使用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>@H_404_9@
解决方法
首先,这里有两个必读[我再说一遍,必读]:
> 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,我希望这是因为你决定,而不是因为你不知道更好.