1

我有一个网站,要求用户输入他们的公司网络用户名和密码。然后它会在 Active Directory 中查找该帐户并获取与该帐户关联的所有电子邮件地址的列表。

我遇到的问题是一个错误的密码正在锁定一个帐户。我们的域政策是一个帐户将在三个不正确的条目后锁定,所以我假设我在我的代码中做错了什么。一般来说,我对 Active Directory 或 .NET DirectoryServices 不是很了解,这从我的代码中可能很明显。这里是:

public ArrayList AuthenticateActiveDirectory(string Domain, string UserName, string Password)
{
    // An error occurs if the username/password combo does not exist.
    // That is how we know it is not a valid entry.
    try
    {
        DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain, UserName, Password);
        object nativeObject = entry.NativeObject;
        ArrayList emails = new ArrayList();
        DirectorySearcher ds = new DirectorySearcher(entry);
        ds.Filter = "samaccountname=" + UserName;
        ds.PropertiesToLoad.Add("mail");
        SearchResult sr = ds.FindOne();
        if (sr.Properties["mail"] != null)
        {
            for (int email = 0; email < sr.Properties["mail"].Count; email++)
            {
                emails.Add(sr.Properties["mail"][email]);
            }
        }
        return emails;
    }
    catch (DirectoryServicesCOMException) { throw; }
    catch (Exception) { throw; }
}
4

1 回答 1

0

我进行了一些搜索并找到了一些代码(感谢Ayende Rahien的解决方案)来使用它只是进行身份验证而不搜索电子邮件或其他任何东西。我在其他功能之前使用它,它似乎工作正常。我猜我的其他代码不止一次点击 AD - 至少 3 次 - 这导致了锁定。这是我现在用来验证的代码:

    private bool Authenticate(string domain, string user, string password)
{
    try
    {
        using (DirectoryEntry de = new DirectoryEntry("LDAP://" + domain,
                                              user, password))
        {
            return de.NativeObject != null;
        }
    }
    catch
    {
        return false;
    }
}
于 2010-07-06T14:41:06.677 回答