UpdateIIS/DirectoryEntry/ASP.NET - Ошибка входа
Сведя на вершине, потому что это сумасшедшие :)
Поэтому некоторые пользователи его работу, некоторые нет. Когда я использую свою собственную учетную запись через IE7, она не работает (мой код ловит исключение и возвращается к простому использованию имени идентификации вместо имени AD). Когда я пытаюсь через Chrome, он запрашивает у меня имя пользователя и пароль, которые я предоставляю, и отображается полное имя. Таким образом, учетная запись пользователя, код сервера и настройки идентичны, но использование другого браузера для отправки аутентификации заставляет его работать.
Я также очистил все файлы cookie от IE7, перезапустил и не изменилось поведение IE. Множество пользователей IE7 работают нормально.
Update # 2
Дистанционно вошли в другую машину, пошел на страницу в IE7, и он показывает свое полное имя. Нет подсказки. Я думал, что сеанс кэшировал что-то, но я переиздал приложение, и это должно очистить сеанс. Я думал, что у печенья был старый/плохой токен, но я очистил их и попробовал еще раз. Что-то где-то должно получиться долгосрочное кэширование. Надеюсь, он сам работает.
End Обновления
Здравствуйте,
Я извлечение пользователей полное название нашей эры в приложении 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 или что, но код не изменился.
Я знаю, что мне нужно было выдавать себя за ранее, чтобы заставить его работать, и мне кажется, что мне нужно будет олицетворять себя, поэтому я не решаюсь удалить вызов олицетворения, не зная, что происходит, и почему эта ошибка теперь происходит.
Спасибо.
После тестирования немного больше, пока я не уверен, где проблема, я не думаю, что он может на 100% быть сервером. Я добавил обновление, но в основном он работает для той же учетной записи, того же сервера, того же клиентского компьютера, разных браузеров (один браузер не работает, один работает). Я немного в тупике. Я попробовал это предложение и установил, что серверу доверяют делегирование, но ситуация не кажется исправленной (при этом время распространения может быть выше, чем я ждал). – anonymous