Как войти в Active Directory?

У меня есть имя пользователя и пароль для активного каталога, и я хочу войти в активный каталог с помощью С#. Как я могу сделать это в Windows Forms?


person Arian    schedule 26.07.2012    source источник
comment
Чего именно вы хотите добиться? Войти - что дальше?   -  person abatishchev    schedule 26.07.2012
comment
Позвоните в некоторые WCF службы, у которых есть WS-Http Binding   -  person Arian    schedule 26.07.2012
comment
Итак, вы хотите войти в Active Directory или в Windows Server, который находится в домене?   -  person abatishchev    schedule 26.07.2012
comment
Я хочу войти в Active Directory   -  person Arian    schedule 26.07.2012
comment
Вы продолжаете повторять это - уточните! Что ты хочешь делать? Чего вы хотите достичь?   -  person J. Steen    schedule 26.07.2012
comment
Можно ли войти в AD с помощью NetworkCredential?   -  person Arian    schedule 26.07.2012


Ответы (4)


Ну вот. Этот метод проверяет username/password относительно Active Directory и уже довольно давно является частью моего набора функций.

//NOTE: This can be made static with no modifications
public bool ActiveDirectoryAuthenticate(string username, string password)
{
    bool result = false;
    using (DirectoryEntry _entry = new DirectoryEntry())
    {
        _entry.Username = username;
        _entry.Password = password;
        DirectorySearcher _searcher = new DirectorySearcher(_entry);
        _searcher.Filter = "(objectclass=user)";
        try
        {
            SearchResult _sr = _searcher.FindOne();
            string _name = _sr.Properties["displayname"][0].ToString();
            result = true;
        }
        catch
        { /* Error handling omitted to keep code short: remember to handle exceptions !*/ }
    }

    return result; //true = user authenticated!
}

Программное обеспечение, выполняющее это, должно быть запущено на компьютере внутри домена, очевидно (иначе у вас не будет Active Directory для аутентификации ваших учетных данных).

person Alex    schedule 26.07.2012
comment
В чем разница между вашим решением и NetworkCredential cred = new NetworkCredential(User, Pass, Domain);? можете ли вы объяснить больше, пожалуйста - person Arian; 26.07.2012
comment
NetworkCredential — это просто объект с некоторыми данными внутри, он ничего не проверяет. - person Alex; 26.07.2012

Этот вопрос задан пару лет назад, я надеюсь, что этот ответ поможет людям в будущем. Это работает для меня:

Добавьте эти ссылки:

  • с помощью System.DirectoryServices;
  • с помощью System.DirectoryServices.AccountManagement;

После этого вы можете использовать этот код в своем приложении:

   PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOUR DOMAIN");
   bool Valid = pc.ValidateCredentials("User", "password");

Переменная с именем Valid покажет вам значение True, если вход в систему в порядке.

Для получения дополнительной информации посетите эту страницу. Страница отсюда, stackOverFlow, и она покажет вам много информации о: "войти с помощью MS Active Directory"

person Orlando Herrera    schedule 18.02.2014

Решение

Подключиться к Active Directory очень просто.

Вы должны использовать объект DirectoryEntry (в пространстве имен System.DirectoryServices).

Конструктор для этого объекта принимает в параметрах три строки:

  • путь к Active Directory. Этот путь имеет формат: LDAP://your-name-AD
  • имя пользователя для подключения
  • соответствующий пароль

Пример

using System.DirectoryServices;

try
{
   DirectoryEntry Ldap = new DirectoryEntry("LDAP://your-name-AD", "Login", "Password");
}
catch(Exception Ex)
{
   Console.WriteLine(Ex.Message);
}
person GG.    schedule 26.07.2012
comment
что такое DirectoryEntry? Я хочу пользователя using System.Security.Principal; спасибо - person Arian; 26.07.2012
comment
В чем разница между вашим решением и NetworkCredential cred = new NetworkCredential("User", "Pass", "Domain");? можете ли вы объяснить больше, пожалуйста - person Arian; 26.07.2012
comment
DirectoryEntry обрабатывает все действия, выполняемые над AD; не NetworkCredential . - person GG.; 26.07.2012

более короткий ответ — добавить ссылку System.DirectoryServices.AccountManagement

Затем используйте UserPrincipal.Current.Context.ValidateCredentials("имя пользователя", "пароль");

Но я предполагаю, что вам нужно будет присоединиться к домену, который вы хотите проверить.

person Mohammed AlJasim    schedule 12.01.2016