Убедитесь, что пароль правильный
Мне нужно проверить, если пароль правильный для пользователя.
у меня есть этот код:
private bool checkOldPasswordValid(string password, string username)
{
using (DirectoryEntry entry = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
{
entry.Username = username;
entry.Password = password;
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "(objectclass=user)";
try
{
searcher.FindOne();
}
catch (Exception ex)
{
return false;
}
return true;
}
}
но тогда поиск каталогов не поддерживается WinNt, поэтому я нашел другой способ перебрать все записи.
foreach (DirectoryEntry dc in entry.Children)
{
// prints the name
System.Diagnostics.Debug.WriteLine(dc.Name);
}
но это просто получает имя и не проверяет пароль.
пожалуйста помоги. Спасибо
2 ответа
Для аутентификации против LDAP или WinNT вам не нужно DirectorySearcher
, Вам нужно только получить NativeObject
от твоего DirectoryEntry
пример. Вот пример кода, который может помочь вам в этом.
public bool Authenticate(string username, string password, string domain) {
bool authenticated = false;
using (DirectoryEntry entry = new DirectoryEntry(@"WinNT://" + domain, username, password) {
try {
object nativeObject = entry.NativeObject;
authenticated = true;
} catch (DirectoryServicesCOMException ex) {
}
}
return authenticated;
}
Этот код вернет либо аутентичный пользователь, либо нет. Как только вы можете получить свойство NativeObject, используя этот DirectoryEntry
экземпляр класса, это означает, что AD (или локальный компьютер) использовал олицетворение, чтобы получить этот объект. Если вы получаете объект без выданного исключения, это означает, что AD (или локальный компьютер) смог аутентифицировать олицетворенного пользователя.
Хотя вы можете использовать аутентифицированного пользователя, указав не имя пользователя и пароль, а только домен (или локальный компьютер), указав имя пользователя и пароль, вы говорите, что хотите использовать олицетворение, поэтому инфраструктура безопасности будет использовать данное имя пользователя и пароль, чтобы попытаться получить NativeObject
собственность из этого DirectoryEntry
экземпляр класса.
Для аутентификации на AD просто замените "WinNT://"
за "LDAP://"
,
Вы можете использовать DirectoryEntry сам.
Смотрите пример здесь: http://support.microsoft.com/kb/316748
Почему вы используете WinNT:// в любом случае?