прикрепленная ссылка
ался решить эту проблему весь день, и я прочитал противоречивую информацию в стандартных ответах доски объявлений 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))";
с соответствующим доменом и указанным пользователем.