【问题标题】:The ChangePassword invocation with DirectoryEntry object使用 DirectoryEntry 对象的 ChangePassword 调用
【发布时间】:2011-02-01 23:41:08
【问题描述】:

无论我试图抛出什么,这里的这个方法总是会导致以下异常:

         var retVal = this.DirectoryEntry.Invoke("ChangePassword", new object[] { oldPassword, newPassword }) == null;

InnerException = {"密码不符合密码策略要求。检查最小密码长度、密码复杂性和密码历史要求。(HRESULT 异常:0x800708C5)"}

我自然而然地检查了域默认策略(在我的测试域中找不到)、OU 组策略(不存在)并且找不到任何可以管理密码策略的东西,但无论我提供的密码有多长或多复杂功能是,它会导致相同的异常。 现在最有趣的部分 当我通过调用这个来做同样的事情(对于相同的 DirectoryEntity 对象和相同的密码):

 var retVal = this.DirectoryEntry.Invoke("SetPassword", new object[] { newPassword }) == null;

最后一次调用成功,没有任何问题。

【问题讨论】:

    标签: c# .net active-directory


    【解决方案1】:

    有许多组策略会影响密码的复杂性。在安装 Active Directory 后,它们中的大多数默认情况下会打开。如果您在设置测试域后从未接触过它们,很可能这些密码策略仍然存在。

    这是我的测试域默认域安全设置的样子。如果您之前没有更改它,它应该看起来相似。

    您可以在 MSDN 上找到每个策略的详细说明。我将在此处仅包含摘要和链接。

    以上所有设置都可能导致您的 0x800708C5 错误。特别是,我猜这是“最小密码年龄”密码策略给你带来的麻烦。默认设置为 1 天。如果您的测试帐号是刚刚创建的新用户帐号,您不能在当天更改密码。

    所以现在,您可能认为在您的测试环境中,您应该禁用所有这些密码策略以用于开发目的。我不建议通过取消选中属性页中的复选框来简单地取消所有策略。我会推荐以下设置。

    您需要做的最后一步是再次将组策略填充到您的计算机。请记住,组策略是存储在 Active Directory 上的设置。机器组策略在机器启动时应用,而用户组策略在用户登录时应用。密码策略是这些机器策略之一。因此,您可以现在重新启动计算机,也可以转到命令提示符并运行 gpupdate

    我希望我没有错过任何重要信息。如果它仍然不起作用,请告诉我:)

    【讨论】:

      【解决方案2】:

      我没有直接的答案,但这里还有另一个类似的问题:https://stackoverflow.com/questions/2517262

      小心使用 SetPassword,因为它会破坏私人用户加密密钥:http://msmvps.com/blogs/alunj/archive/2006/11/07/ChangePassword-versus-SetPassword.aspx

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 2014-10-04
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 2010-11-02
        相关资源
        最近更新 更多