【问题标题】:Ldap: how to implement password history when user change their passwordLdap:当用户更改密码时如何实现密码历史记录
【发布时间】:2014-06-19 21:00:16
【问题描述】:

在 Active Directory 中,我如何检查以使用户不能继续反复使用相同的密码(当用户更改密码时)?

目前我正在使用以下代码更改密码。

using (connection)
{
    connection.Bind();
    SearchRequest request = new SearchRequest(this._userDN, string.Format(Global.LDAPConstants.SEARCH_FILTER, this._accountFilter, userName), System.DirectoryServices.Protocols.SearchScope.Subtree);
    SearchResponse response = (SearchResponse)connection.SendRequest(request);

    DirectoryAttributeModification modifyUserPassword = new DirectoryAttributeModification();
    modifyUserPassword.Operation = DirectoryAttributeOperation.Replace;
    modifyUserPassword.Name = "unicodePwd";
    modifyUserPassword.Add(GetPasswordData(newPassword));

    ModifyRequest modifyRequest = new ModifyRequest(response.Entries[0].DistinguishedName, modifyUserPassword);
    DirectoryResponse dirResponse = connection.SendRequest(modifyRequest);
}

【问题讨论】:

    标签: c# asp.net active-directory ldap


    【解决方案1】:

    您可以使用组策略来强制执行密码历史记录,因此用户在更改后无法使用相同的密码。

    使用策略编辑器打开您的域策略,然后转到计算机配置 --> 策略 --> 安全设置 --> 密码策略。您将看到“强制执行密码策略”,定义一个值。

    【讨论】:

    • 好的,感谢您的快速响应。我会在代码中进行一些更改吗?
    • 发送请求后你应该得到一个异常,因为如果新密码之前使用过并且在历史记录中可用,服务器将拒绝它。
    • 这个答案是你想要的吗?
    • 这是 ldap 的设置吗?
    【解决方案2】:

    这不是 LDAP 的设置,而是 AD 的设置。 AD 存储策略信息并检查密码历史提供,LDAP 从 AD 检索信息。

    请您的网络管理员设置强制密码历史选项

    一旦设置,用户将无法设置与最后 N 个密码相同的密码(最多 24 个)。 Windows(Ctrl+Alt+Del,更改密码)和您具有更改密码功能的所有应用程序都将使用该策略。这是实施密码策略的最安全和推荐的方法。

    更多详情http://technet.microsoft.com/en-us/library/cc875814.aspx

    如果你输入的密码违反了密码历史记录,你会得到一个异常

    The password does not meet the password policy requirements. Check 
    the minimum password length, password complexity and password history 
    requirements. (Exception from HRESULT: 0x800708C5)"
    

    【讨论】:

      【解决方案3】:

      我已经检查了 GPO 设置并且它是正确的,但是密码历史仍然不能以编程方式更改密码,我正在使用下面的代码来更改我上面已经提到的密码。

      使用(连接)

      {

          connection.Bind();
          SearchRequest request = new SearchRequest(this._userDN,string.Format(Global.LDAPConstants.SEARCH_FILTER, this._accountFilter, userName), System.DirectoryServices.Protocols.SearchScope.Subtree);
          SearchResponse response = (SearchResponse)connection.SendRequest(request);
      
          DirectoryAttributeModification modifyUserPassword = new DirectoryAttributeModification();
          modifyUserPassword.Operation = DirectoryAttributeOperation.Replace;
          modifyUserPassword.Name = "unicodePwd";
          modifyUserPassword.Add(GetPasswordData(newPassword));
          ModifyRequest modifyRequest = new ModifyRequest(response.Entries[0].DistinguishedName, modifyUserPassword);}
      

      我已经提到了我们的 AD 服务器设置的图像。

      http://i.stack.imgur.com/LyVYP.png
      http://i.stack.imgur.com/xitdY.png

      【讨论】:

      【解决方案4】:

      非常感谢,我这样修改了“更改密码”的代码,现在可以正常使用了。

      使用(连接)

              {
                  connection.Bind();
                  SearchRequest request = new SearchRequest(this._userDN, string.Format(Global.LDAPConstants.SEARCH_FILTER, this._accountFilter, userName), System.DirectoryServices.Protocols.SearchScope.Subtree);
                  SearchResponse response = (SearchResponse)connection.SendRequest(request);
                  string path = "LDAP://" + this._domain + "/" + response.Entries[0].DistinguishedName;
                  DirectoryEntry usr = new DirectoryEntry(path, userName, oldPassword);
                  usr.Invoke("ChangePassword", new object[] { oldPassword, newPassword });
                  usr.CommitChanges();
              }
      

      【讨论】:

        猜你喜欢
        • 2014-11-14
        • 2017-05-06
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多