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