【问题标题】:Active Directory Account locking out on first tryActive Directory 帐户在首次尝试时锁定
【发布时间】:2010-07-06 12:42:57
【问题描述】:

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

【问题讨论】:

  • 与你的问题无关,但catch (Exception) { throw; }的意义何在?
  • Nothing :) 如果我认为我可能需要在那里进行额外的处理,我有时会把它放进去。我也在调试时使用它,它可以作为额外的提醒,这些异常可能在这里发生。

标签: asp.net active-directory directoryservices


【解决方案1】:

我进行了一些搜索并找到了一些代码(感谢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;
    }
}

【讨论】:

  • 作为旁注,密码重试的一般经验法则是将其提高到 10 次左右。这是因为各种 Windows 组件因在最终给出“拒绝访问”消息之前会静默重试几次而臭名昭著。这也不是真正的安全性下降,因为它几乎不可能在 10 次尝试中猜出密码,因为它是 3 次。此外,如此小的限制可能导致非常成功的 DOS 攻击,其中攻击者只是试图阻止其他人登录在。
  • 谢谢,但这不是我的决定。我认为我们的网络管理员不会同意这一点。关于 DOS 攻击:此站点仅供内部使用。
猜你喜欢
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多