4

我有一个使用默认 Sql MembershipProvider 的 C# asp.net 应用程序。我的 web.config 有一些设置可以控制我如何使用这个 Provider:

enablePasswordRetrieval="false" 
enablePasswordReset="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" 
minRequiredPasswordLength="5" 

我遇到的问题是,当人们重置密码时,ResetPassword() 方法似乎返回的密码比我想要的长,并且包含可能令人困惑的字符 (l,1,i,I,0,O )。此外,我正在向我的用户发送一封带有纯文本消息和 HTML 消息的电子邮件(我正在使用带有 AlternateViews 的 MailMessage)。如果密码中包含不安全的 HTML 字符,则当电子邮件客户端呈现 HTML 文本时,密码可能会有所不同(例如,%、& 和 < 并不完全是 HTML 安全的)。

我查看了属于 web.config 的“add”元素,但我没有看到任何额外的配置属性,仅在 ResetPassword() 方法中包含某些字符并限制密码长度。

我可以配置 ResetPassword() 方法来限制密码长度并限制它选择的字符集吗?

现在我有一个解决方法:我调用 ResetPassword() 以确保提供的答案是正确的,然后我使用从互联网上下载的RandomPassword 生成器来生成我喜欢的密码(没有模糊字符,HTML 安全,并且只有8 个字符长),然后我在重置用户密码后调用 ChangePassword() 来更改用户密码。

我的解决方法似乎很笨拙,我认为最好配置 ResetPassword() 来做我想做的事。

谢谢~!

科罗拉多技术公司

4

3 回答 3

2

我不相信您可以做任何事情来“配置” ResetPassword() 调用。您可以编写自己的提供程序来更改 ResetPassword() 的工作方式。

这个链接描述了你似乎已经在做的同样的策略......

继续工作/破解可能是最简单的方法。:-)

但是,如果您想了解有关如何创建自己的提供商的更多信息,请查看这些链接。

http://www.asp.net/learn/videos/video-189.aspx

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

http://www.devx.com/asp/Article/29256/0/page/3

http://www.15seconds.com/issue/050216.htm

于 2010-04-02T16:51:34.710 回答
2

使用该GeneratePassword方法至少可以确保创建的密码满足您对MinRequiredPasswordLength和的设置MinRequiredNonAlphanumericCharacters。我正在做这样的事情:

// aUser is of class MembershipUser
string aTempPassword = aUser.ResetPassword();
string aNewPassword = Membership.GeneratePassword(
                           Membership.MinRequiredPasswordLength, 
                           Membership.MinRequiredNonAlphanumericCharacters);
aUser.ChangePassword(aTempPassword, aNewPassword);

好吧,这只是您想要的 50%,因为您无法控制用于最终密码的字符集。

(实际上,从我的角度来看,这也是更重要的方面 - 特别是如果您的用户需要 10 分钟和 3 次支持电话才能成功点击弯括号的组合键并且不知道剪贴板是什么。ResetPassword可以让您最讨厌的人之一。)

于 2010-04-02T17:30:47.650 回答
1

我知道这已经得到了回答,但自从我今天遇到这个问题以来,我想加我的 2 美分。

SQLMembershipProvider公开

public virtual string GeneratePassword()

ResetPassword调用。因此,您可以简单地扩展 SQLMembershipProvider 类并实现您自己的GeneratePassword版本。

请注意,这样做将要求您更新 web.config 中的成员资格提供程序条目以使用新的成员资格提供程序类:

<membership>
  <providers>
    <add type="My.Namespace.MyCustomSqlMembershipProvider" ... />        
于 2011-02-16T01:09:11.850 回答