我想知道如何在C#中设置Active Directory(AD)中的登录计数。目前,我有一个库,它根据用户名和密码检查特定用户是否在AD中,但是当我在AD Explorer中查看该用户时,我没有看到登录计数数字变得越来越大(从1到2等等)。使用C#登录到Active Directory
我假设我需要从C#访问'登录'方法来执行此操作,但是我没有在任何DirectoryServices(以及AccountManagement)方法中看到类似这样的方法。
有什么建议吗?
谢谢 添
我想知道如何在C#中设置Active Directory(AD)中的登录计数。目前,我有一个库,它根据用户名和密码检查特定用户是否在AD中,但是当我在AD Explorer中查看该用户时,我没有看到登录计数数字变得越来越大(从1到2等等)。使用C#登录到Active Directory
我假设我需要从C#访问'登录'方法来执行此操作,但是我没有在任何DirectoryServices(以及AccountManagement)方法中看到类似这样的方法。
有什么建议吗?
谢谢 添
你检查所有的域控制器?根据该属性的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;
}
}
它没有增加它。至少在几次尝试之后。我们在这里有一些区议会,我不知道如何针对特定的区议会。
嗯,是的,但我没有回答我的问题。我的问题是我可以通过Active Directory进行身份验证,但Active Directory未记录我已通过身份验证的事实(即 - 登录计数未递增,并且最后登录时间戳未在用户身份验证时设置为)。这是我遇到的问题。谢谢,蒂姆 – Rushman
请参阅我编辑的答案。 – Tofystedeth