Можно ли получить данные из Active Directory, выдав себя за аутентифицированного пользователя Windows в ASP.NET?

Я пытался решить эту проблему весь день, и я прочитал некоторую противоречивую информацию в стандартных ответах доски объявлений Google.

Я пытаюсь получить адрес электронной почты пользователя домена (то есть текущего пользователя, вошедшего в систему) из активного каталога. Мой веб-сайт ASP.NET 4 настроен для проверки подлинности Windows, и все работает нормально, пока активный каталог вызывает.

Когда я делаю следующее, я получаю исключение COMException в строке search.findAll (). Сообщение об исключении: «Произошла ошибка операции» (очень полезное сообщение, а?) (Урезанный код для удобства чтения)

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext wic = null;

wic = winId.Impersonate();
using (DirectoryEntry root = new DirectoryEntry(rootQuery))
{
      String userQuery = GetUserQuery();
      DirectorySearcher searcher = new DirectorySearcher(root);
      searcher.SearchScope = SearchScope.Subtree;
      searcher.Filter = userQuery;

      SearchResultCollection results = searcher.FindAll();
      return (results[0].Properties["proxyaddresses"][0]).ToString();
}

Итак, я хочу выдать себя за вошедшего в систему пользователя, чтобы сделать звонок. Обратите внимание, что этот код работает должным образом, если я передаю свои учетные данные непосредственно конструктору DirectoryEntry. Кроме того, я получаю ту же ошибку, если избавляюсь от кода олицетворения и устанавливаю олицетворение для всего приложения в веб-конфигурации.

Итак, я предполагаю свой вопрос, прежде чем я буду тратить на это больше времени, возможно ли это вообще? Или у вас есть , чтобы указать имя пользователя и пароль для доступа к AD?

Кстати, в моем окне разработчика я использую IIS5, но, вероятно, буду развертывать его на IIS6.

изменить:

как запрошено:

rootQuery = @"LDAP://{0}.com/DC={0}, DC=com";
userQuery = @"(&(samAccountName={0})(objectCategory=person)(objectClass=user))";

с указанием правильного домена и пользователя.

5
задан Sean Carpenter 18 July 2011 в 13:56
поделиться