2015-11-03 114 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

相关问题