使用C#登录到Active Directory
本文关键字:Active Directory 登录 使用 | 更新日期: 2023-09-27 18:20:21
我想知道如何从C#设置Active Directory(AD)中的登录计数。目前,我有一个库,可以根据用户名和密码检查特定用户是否在AD中,但当我在AD Explorer中查看该用户时,我没有看到登录计数越来越大(从1到2,依此类推)。
我假设我需要从C#访问一个"Logon"方法才能做到这一点,但我在任何DirectoryServices(以及AccountManagement)方法中都没有看到这样的方法。
有什么建议吗?
谢谢,Tim
您检查了所有域控制器吗?根据该属性的文档:
此属性不复制,并在域中的每个域控制器上维护。要获得用户在域中成功登录尝试总数的准确值,必须查询域中的每个域控制器,并使用值的总和。请记住,该属性不是复制的,因此,已停用的域控制器可能也已为用户统计了登录次数,并且这些登录次数将从计数中丢失。
edit:我想这取决于你如何测试用户名和密码。在我的一个应用程序中,我以类似的方式检查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;
}
}
它确实增加了它。至少在几次尝试之后。我们这里有很多DC,我不知道如何针对特定的DC。