Обновление
Ставить это сверху, потому что это безумие :) 1005 *
Так что у некоторых пользователей это работает, у некоторых нет. Когда я использую свою собственную учетную запись через IE7, она не работает (мой код перехватывает исключение и возвращается к простому использованию идентификационного имени вместо полного имени AD). Когда я пытаюсь через Chrome, он запрашивает у меня имя пользователя и пароль, которые я предоставляю, и отображается полное имя. Таким образом, учетная запись пользователя, код сервера и настройки идентичны, но использование другого браузера для отправки аутентификации делает его работоспособным.
Я также удалил все куки из IE7, перезапустил, и в поведении IE не было никаких изменений. У многих пользователей IE7 все работает нормально.
Обновление № 2
Удаленно вошел на другую машину, зашел на страницу в IE7, и там отображается мое полное имя. Понятия не имею. Я думал, может быть, сессия что-то кэширует, но я переиздал приложение, и это должно очистить сессию. Я думал, что, возможно, печенье имеет старый / плохой токен, но я очистил его и попробовал снова. Что-то где-то должно быть долгосрочное кэширование. Надеюсь, все получится.
Конечные обновления
Hello
Я получаю полное имя пользователя из нашей AD в приложении ASP.NET (MVC), работающем на IIS 6.0.
string domainUser = filterContext.HttpContext.User.Identity.Name;
WindowsIdentity windowsIdentity = filterContext.HttpContext.User.Identity as WindowsIdentity;
WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate();
DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domainUser.Replace('\\', '/') + ",User");
filterContext.Controller.ViewData["User"] = (string)userEntry.Properties["fullname"].Value;
В последней строке выдается исключение: «Ошибка входа: неизвестное имя пользователя или неверный пароль».
Если я посмотрю на HttpContext.User.Identity, то это действительный пользователь домена, и WindowsIdentity.GetCurrent будет выдавать себя за другого.
Это исключение также, по-видимому, не выдается 100% времени, и оно не выдается при просмотре с сервера IIS.
Мой web.config выглядит так:
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</authorization>
<identity impersonate="false"/>
Что меня беспокоит, так это то, что если я удалю строку с подражанием:
WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate();
Это работает. WindowsIdentity.GetCurrent - это NT AUTHORITY \ NETWORK SERVICE, которая не является пользователем домена, но не выдается исключение и полное имя извлекается из AD.
Последний момент заключается в том, что это, похоже, только начало происходить при новом развертывании приложения (от тестирования до запуска). Я не знаю, пропускаю ли я настройки IIS или что-то еще, но код не изменился.
Я знаю, что раньше мне нужно было выдать себя за другого, чтобы заставить его работать, и, похоже, мне нужно было выдать себя за другого, поэтому я не решаюсь удалить вызов с имитацией, не зная полностью, что происходит и почему эта ошибка сейчас случается.
Спасибо.