使用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

使用C#登录到Active Directory

您检查了所有域控制器吗?根据该属性的文档:

此属性不复制,并在域中的每个域控制器上维护。要获得用户在域中成功登录尝试总数的准确值,必须查询域中的每个域控制器,并使用值的总和。请记住,该属性不是复制的,因此,已停用的域控制器可能也已为用户统计了登录次数,并且这些登录次数将从计数中丢失。

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。