Использование PrincipalContext и PrincipalSearcher для доступа к пользователям Active Directory с отдельного сервера

У меня есть следующий код для получения текущих активных пользователей каталога:

public List<DomainContext> GetADUsers(string term=null)
{
    List<DomainContext> results = new List<DomainContext>();
    string ADServerName = System.Web.Configuration.WebConfigurationManager.AppSettings["ADServerName"];

    using (var context = new PrincipalContext(ContextType.Domain, ADServerName))
    using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
    {
        var searchResults = searcher.FindAll();

        foreach (Principal p in searchResults)
        {
            if (term == null || p.SamAccountName.ToString().ToUpper().StartsWith(term.ToUpper()))
            {
                DomainContext dc = new DomainContext();
                dc.DisplayName = p.DisplayName;
                dc.UserPrincipalName = p.UserPrincipalName;
                dc.Name = p.Name;
                dc.SamAccountName = p.SamAccountName;

                results.Add(dc);
            }
        }
    }

    return results;
}

Моя текущая ситуация выглядит следующим образом:

  1. Я работаю на машине для разработки, где веб-приложение ASP.NET MVC и Active Directory находятся на одном компьютере.

  2. Я не передаю имена пользователей и пароли, чтобы получить пользователей AD.

Поэтому при переносе веб-приложения ASP.NET MVC, содержащего приведенный выше код, на мой сервер UAT возникают следующие проблемы:

  1. На сервере UAT веб-приложение ASP.NET MVC и AD будут находиться на двух разных машинах.
  2. Для доступа к AD с определенной машины мне может понадобиться отправить имя пользователя и пароль на сервер AD.

Будет ли мой оригинальный код работать, если:

  1. AD и веб-приложение ASP.NET MVC находятся на разных машинах?
  2. А если сервер AD требует передачи имени пользователя и пароля вместе с?

1 ответ

Есть две возможности.

Либо вы передаете имя пользователя / пароль в PricipalContext, либо у удостоверения пула приложений есть достаточно привилегий для запроса AD, и вам не нужно вводить имя пользователя / пароль.

Если сервер приложений находится в AD, последний очень удобен, поскольку в коде и / или файлах конфигурации нет имени пользователя / пароля. Если, с другой стороны, сервер приложений не находится в AD, передача имени пользователя / пароля явным образом является единственной возможностью для этого.

Другие вопросы по тегам