2015-11-03 154 views
0

我想知道如何在C#中設置Active Directory(AD)中的登錄計數。目前,我有一個庫,它根據用戶名和密碼檢查特定用戶是否在AD中,但是當我在AD Explorer中查看該用戶時,我沒有看到登錄計數數字變得越來越大(從1到2等等)。使用C#登錄到Active Directory

我假設我需要從C#訪問'登錄'方法來執行此操作,但是我沒有在任何DirectoryServices(以及AccountManagement)方法中看到類似這樣的方法。

有什麼建議嗎?

謝謝 添

+0

請參閱我編輯的答案。 – Tofystedeth

回答

0

你檢查所有的域控制器?根據該屬性的documentation

此屬性不會被複制並在域中的每個域控制器上進行維護。要獲得用戶在域中成功登錄嘗試的總次數的準確值,必須查詢域中的每個域控制器,並且應該使用這些值的總和。請記住,該屬性未被複制,因此退役的域控制器可能也會爲用戶計入登錄名,並且這些將從計數中缺失。

編輯:我想這取決於你如何測試用戶名和密碼。在我的一個應用程序中,我以類似於此的方式檢查U/P。

NetworkCredential credentials = new NetworkCredential(userName, password, domain); 
     LdapDirectoryIdentifier id = new LdapDirectoryIdentifier(domain); 
     using (LdapConnection connection = new LdapConnection(id, credentials, AuthType.Kerberos)) 
     { 
      connection.SessionOptions.Sealing = true; 
      connection.SessionOptions.Signing = true; 

      try 
      { 
       connection.Bind(); 
      } 
      catch (LdapException lEx) 
      { 
       if (ERROR_LOGON_FAILURE == lEx.ErrorCode) 
       { 
        return false; 
       } 
       throw; 
      } 

     } 
     return true; 

經過多次嘗試似乎沒有增加DC上的登錄計數器,我打了。

然而,當我用這個方法

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain)) 
     { 
      bool authenticated; 
      authenticated = pc.ValidateCredentials(userName, password); 
      if (authenticated) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

它沒有增加它。至少在幾次嘗試之後。我們在這裏有一些區議會,我不知道如何針對特定的區議會。

+0

嗯,是的,但我沒有回答我的問題。我的問題是我可以通過Active Directory進行身份驗證,但Active Directory未記錄我已通過身份驗證的事實(即 - 登錄計數未遞增,並且最後登錄時間戳未在用戶身份驗證時設置爲)。這是我遇到的問題。謝謝,蒂姆 – Rushman