首次尝试时,Active Directory帐户会锁定

时间:2010-07-06 12:42:57

标签: asp.net active-directory directoryservices

我有一个网站,要求用户输入他们的公司网络用户名和密码。然后,它会在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; }
}

1 个答案:

答案 0 :(得分: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;
    }
}