MembershipProvider和PasswordRecovery控件

时间:2009-07-01 16:30:02

标签: c# .net .net-2.0 asp.net-membership membership

我在.net 2.0中使用PasswordRecovery控件需要帮助。我的情况是应用程序已从将密码格式存储在Hashed中变为Clear。

问题是新创建的用户存储了明确的密码,但仍有用户使用散列密码。当我对仍然使用哈希密码的用户使用如下密码恢复控件时,对于那些具有散列密码的用户,“密码格式”字段不会更改为“清除”。

<asp:PasswordRecovery MailDefinition-BodyFileName="/mailTemplates/changePassword.htm" MailDefinition-From="test@test.com" MailDefinition-Subject="Test" CssClass="noLines" ID="PasswordRecovery1" UserNameTitleText="" UserNameInstructionText="Enter User name and a new passord will be generated and mailed to the user"  runat="server" SuccessText="Your password has been sent to your registered email address." SubmitButtonStyle-CssClass="button" 
    onsendingmail="PasswordRecovery1_SendingMail" MembershipProvider="AspNetSqlMembershipProviderF0005600">
    </asp:PasswordRecovery>

<membership>
  <providers>
    <remove name="AspNetSqlMembershipProviderF0005600"/>
    <add name="AspNetSqlMembershipProviderF0005600" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" passwordFormat="Clear" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
  </providers>
</membership>

(提前道歉)。

1 个答案:

答案 0 :(得分:1)

简短回答是,您必须使用成员资格存储过程为具有散列密码的用户更改此设置。由于密码是经过哈希处理的,因此它们永远不会被恢复(除了破坏哈希算法)。

http://mishler.net/PermaLink,guid,ea65afc0-2970-46f1-9412-4b57bbd906f4.aspx。滚动到文章末尾的“更改密码格式”部分。

在恢复页面上,您可以运行存储过程来查找格式,并在用户决定使用恢复时更改密码和格式。但是您可以更加主动并更改所有哈希用户密码,并通过电子邮件发送密码已被重置的用途。