2009-06-29 3 views
2

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 или что, но код не изменился.

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

Спасибо.

ответ

1

Я подозреваю, что проблема заключается в том, что сервер, на котором размещено ваше приложение ASP.NET, не является доверенным для делегирования. Google для «доверенных для делегирования» для получения дополнительной информации, или this MSDN article является хорошей отправной точкой.

+0

После тестирования немного больше, пока я не уверен, где проблема, я не думаю, что он может на 100% быть сервером. Я добавил обновление, но в основном он работает для той же учетной записи, того же сервера, того же клиентского компьютера, разных браузеров (один браузер не работает, один работает). Я немного в тупике. Я попробовал это предложение и установил, что серверу доверяют делегирование, но ситуация не кажется исправленной (при этом время распространения может быть выше, чем я ждал). – anonymous