Убедитесь, что пароль правильный - PullRequest
0 голосов
/ 14 октября 2010

Мне нужно проверить, правильный ли пароль для пользователя.

У меня есть этот код:

 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 ]

3 голосов
/ 14 октября 2010

Для аутентификации на 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://".

2 голосов
/ 14 октября 2010

Вы можете использовать сам DirectoryEntry.

См. Пример здесь: http://support.microsoft.com/kb/316748

Почему вы используете WinNT: // anyways?

...