在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);
}
答案 0 :(得分:1)
您可以使用组策略来强制执行密码历史记录,因此用户在更改后无法使用相同的密码。
使用策略编辑器打开您的域策略,然后转到计算机配置 - >政策 - >安全设置 - >密码政策。您将看到"强制执行密码策略",定义一个值。
答案 1 :(得分:0)
这不是LDAP的设置,而是AD的设置。 AD存储策略信息并检查密码历史记录,LDAP从AD检索信息。
请您的网络管理员设置强制密码历史记录选项
设置后,用户将无法设置与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();
}