Active Directory Lookup из C # не работает на сервере, но работает локально - PullRequest
1 голос
/ 08 сентября 2010

На моем рабочем месте мне приходится иметь дело с 2 разными доменами x.com (родительский каталог) и его поддоменом yxcom

В родительском домене (x.com) есть все активные пользователи каталога, компьютеры и т. Д.С моей локальной рабочей станции, которая находится в домене x.com, я могу читать электронные письма для пользователей активного каталога.

Сервер находится в домене yxcom поддомена x.На сервере не удается прочитать активный каталог, а адрес электронной почты не читается из активного каталога.

В дополнение к этому я пытался использовать тот же код с виртуальной машины, которая находится в домене yxcom (так же, как сервер), и, к моему удивлению, это сработало.

Я использую службы каталоговв .NET, чтобы сделать это, и мой код ниже:

string userEmail = string.Empty;

try
{
 accountName = accountName.Replace(ConfigurationManager.AppSettings["DomainName"].ToString(), "");

 DirectorySearcher ds = new DirectorySearcher()
 {
  SearchRoot = new DirectoryEntry()
  {
   Path = ConfigurationManager.AppSettings["DirectoryPath"].ToString(),
   AuthenticationType = AuthenticationTypes.Secure
  }
 };

 ds.Filter = "(SAMAccountName=" + accountName + ")";
 ds.PropertiesToLoad.Add(ConfigurationManager.AppSettings["ADMailPropertyName"].ToString());

 SearchResult result = ds.FindOne();

 if (result != null)
 {
  userEmail = result.Properties[ConfigurationManager.AppSettings["ADMailPropertyName"].ToString()][0].ToString();
 }
}
catch (Exception e)
{
 //Log error
}

return userEmail;

Любая помощь будет оценена.

Ответы [ 3 ]

2 голосов
/ 08 сентября 2010

Имеет ли учетная запись пользователя, на которой работает ваша программа, как на сервере, необходимые разрешения для Active Directory?

1 голос
/ 09 сентября 2010

В комментарии к ответу Грега говорится, что вы используете 1) олицетворение и 2) проверку подлинности Windows.Это означает, что ваш сервер знает, кто вы, и выдает себя за вас.

Но ... ваш сервер не может делегировать эти учетные данные удаленному серверу (серверу домена x.com).Это потенциальное нарушение безопасности, которое, если это возможно, позволяет сайту пересылать ваши учетные данные любой третьей стороне.

Одним из решений является использование аутентификации kerberos и включение вашего сервера для делегирования.,Я никогда не делал этого сам, поэтому не могу действительно помочь вам с деталями.

Подробнее об этом вы можете прочитать на Проблема двойного прыжка .

1 голос
/ 08 сентября 2010

серверный процесс, вероятно, выполняется под учетной записью локального компьютера (системная, локальная). Вам, вероятно, нужно предоставить правильные учетные данные для этой перегрузки конструктора DirectoryEntry .

...