Использование 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;
}
Моя текущая ситуация выглядит следующим образом:
Я работаю на машине для разработки, где веб-приложение ASP.NET MVC и Active Directory находятся на одном компьютере.
Я не передаю имена пользователей и пароли, чтобы получить пользователей AD.
Поэтому при переносе веб-приложения ASP.NET MVC, содержащего приведенный выше код, на мой сервер UAT возникают следующие проблемы:
- На сервере UAT веб-приложение ASP.NET MVC и AD будут находиться на двух разных машинах.
- Для доступа к AD с определенной машины мне может понадобиться отправить имя пользователя и пароль на сервер AD.
Будет ли мой оригинальный код работать, если:
- AD и веб-приложение ASP.NET MVC находятся на разных машинах?
- А если сервер AD требует передачи имени пользователя и пароля вместе с?
1 ответ
Есть две возможности.
Либо вы передаете имя пользователя / пароль в PricipalContext, либо у удостоверения пула приложений есть достаточно привилегий для запроса AD, и вам не нужно вводить имя пользователя / пароль.
Если сервер приложений находится в AD, последний очень удобен, поскольку в коде и / или файлах конфигурации нет имени пользователя / пароля. Если, с другой стороны, сервер приложений не находится в AD, передача имени пользователя / пароля явным образом является единственной возможностью для этого.