Ldap:用户更改密码时如何实现密码历史记录

时间:2014-05-03 05:25:14

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

在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);
}

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

enter image description here

设置后,用户将无法设置与N个最后密码相同的密码(max.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)"

答案 2 :(得分:0)

我已经检查了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

答案 3 :(得分:0)

非常感谢,我更改了"更改密码"像这样,现在它的工作正常。

使用(连接)

        {
            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();
        }