使用ActiveDirectoryMembershipProvider控制ASP.NET ChangePassword

时间:2009-05-15 18:32:29

标签: asp.net active-directory asp.net-membership

我有一个使用ActiveDirectoryMembershipProvider进行表单身份验证的webapp。 这很好用......用户可以成功登录。

用户登录后,可以更改密码。 我们使用ChangePassword控件来检索成员资格信息,并使用旧密码和新密码来更改用户密码。 这不起作用

抛出的异常消息是密码不符合密码策略(不是提供者的消息,而是基础COM对象。但事实并非如此,因为转到ActiveDirectory控制台并在那里更改密码当使用ActiveDirectory控制台时,我们使用了一个非常简单的密码:“Password01”。

ActiveDirectory中的用户设置为允许更改密码。我们所有的用户都存储在某个OU中,AD的连接字符串也指向此OU。同样,连接成功,因为我们可以登录。

还有什么可以阻止我们更改密码?

异常信息

    System.Web.Security.MembershipPasswordException: The password supplied is invalid.
Passwords must conform to the password strength requirements configured for the default provider.
---> System.Runtime.InteropServices.COMException (0x800708C5): The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements. (Exception from HRESULT: 0x800708C5)
       --- End of inner exception stack trace ---
       at System.Web.Security.ActiveDirectoryMembershipProvider.ChangePassword(String username, String oldPassword, String newPassword)
       at System.Web.Security.MembershipUser.ChangePassword(String oldPassword, String newPassword)

2 个答案:

答案 0 :(得分:4)

嗯,抱歉给您带来不便......

问题是Active Directory管理员已经设置您可以在更改密码之前等一天

因此,如果我们创建用户......用户必须等待1天才能更改密码。 管理员可以在没有此限制的情况下重置密码。

感谢您的评论。

答案 1 :(得分:1)

在web.config中配置成员资格提供程序时,可以设置几个与密码相关的值,即:

MinRequiredNonAlphanumericCharacters
MinRequiredPasswordLength
PasswordStrengthRegularExpression

我首先要确保所有这些都设置为与ActiveDirectory匹配的值。

接下来,确保将connectionProtection属性设置为SignAndSeal,否则无法更改密码:

connectionProtection="SignAndSeal"

除了这些建议,我查看了Reflector,并且所有COM错误(除了0x7FF8FAD2)都被直接抛到客户端。错误0x800708C5出现在MSDN中的几个地方,但总是带有密码复杂性不足的文本。