使用ActiveDirectoryMembershipProvider的ASP.NET ChangePassword控件

3

我有一个Web应用程序,使用ActiveDirectoryMembershipProvider进行表单身份验证。这很好...用户可以成功登录。

一旦用户登录,他就可以更改密码。我们使用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)

你能提供确切的COM异常信息吗(还有可能存在的innerException中的信息)? - Ronald Wildenberg
我在那里添加了抛出的异常。我在测试中输入的密码非常复杂...所以我认为这个消息不准确。谢谢您的关注。 - Romias
2个回答

4

抱歉给您带来不便...

问题在于Active Directory管理员设置了在更改密码前需要等待一天的时间。

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

感谢您的评论。


谢谢 - 我这里也是同样的问题,同样的解决方案。 - Vaibhav

1

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

MinRequiredNonAlphanumericCharacters
MinRequiredPasswordLength
PasswordStrengthRegularExpression

首先,我会确保所有这些设置的值与ActiveDirectory匹配。

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

connectionProtection="SignAndSeal"

除了这些建议,我还在 Reflector 中查看了所有的 COM 错误(除了 0x7FF8FAD2),它们都直接抛给客户端。错误代码 0x800708C5 在 MSDN 中出现了多次,但总是伴随着密码复杂度不足的文本。

这是针对特定版本的吗?当我添加它时,它显示为“签名和密封”的无效设置。 - Eric Brown - Cal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接