2014-05-03 128 views
0

在Active Directory中,如何檢查以便用戶不會一次又一次地使用相同的密碼(當用戶更改密碼時)?Ldap:如何在用戶更改密碼時實現密碼歷史記錄

當前我正在使用以下代碼更改密碼。

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

回答

1

您可以使用組策略強制執行密碼歷史記錄,因此用戶在更改後不能使用相同的密碼。

使用策略編輯器打開您的域策略,然後進入計算機配置 - >策略 - >安全設置 - >密碼策略。你會看到「強制密碼策略」,定義一個值。

+0

好的,由於快速響應。我會在代碼中進行一些更改嗎? –

+0

發送請求後應該會發生異常,因爲如果服務器之前使用過並且歷史記錄中可用,服務器將拒絕新密碼。 – jdiver

+0

這個答案是你想要的嗎? – jdiver

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)" 
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

+0

您是否嘗試刷新密碼更改無效的計算機上的策略? http://technet.microsoft.com/en-us/library/cc739112(v=ws.10)。aspx 如果策略被傳播,那麼在使用Ctrl + Alt + Del更改密碼時,密碼歷史記錄檢查也應該有效 – Alex

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