我有一个使用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)
答案 0 :(得分:4)
嗯,抱歉给您带来不便......
问题是Active Directory管理员已经设置您可以在更改密码之前等一天。
因此,如果我们创建用户......用户必须等待1天才能更改密码。 管理员可以在没有此限制的情况下重置密码。
感谢您的评论。
答案 1 :(得分:1)
在web.config中配置成员资格提供程序时,可以设置几个与密码相关的值,即:
MinRequiredNonAlphanumericCharacters
MinRequiredPasswordLength
PasswordStrengthRegularExpression
我首先要确保所有这些都设置为与ActiveDirectory匹配的值。
接下来,确保将connectionProtection属性设置为SignAndSeal,否则无法更改密码:
connectionProtection="SignAndSeal"
除了这些建议,我查看了Reflector,并且所有COM错误(除了0x7FF8FAD2)都被直接抛到客户端。错误0x800708C5出现在MSDN中的几个地方,但总是带有密码复杂性不足的文本。