IIS / DirectoryEntry / ASP.NET - ошибка входа

2

Update

Поместите это вверху, потому что это безумие:)

Итак, некоторые пользователи работают, а некоторые нет. Когда я использую свою собственную учетную запись через IE7, она не работает (мой код ловит исключение и возвращается к простому использованию имени идентификации вместо имени AD). Когда я пытаюсь через Chrome, он запрашивает у меня имя пользователя и пароль, которые я предоставляю, и отображается полное имя. Таким образом, учетная запись пользователя, код сервера и настройки идентичны, но использование другого браузера для отправки аутентификации заставляет его работать.

Я также удалил все файлы cookie из IE7, перезапустил и не изменил поведение IE. Множество пользователей IE7 работают нормально.

Обновление # 2

Удаленный вход в другую машину, перешел на страницу в IE7, и он показывает мое полное имя. Нет подсказки. Я думал, что сеанс кэшировал что-то, но я переиздал приложение, и это должно очистить сеанс. Я думал, что у печенья был старый/плохой токен, но я очистил их и попробовал еще раз. Что-то где-то должно получиться долгосрочное кэширование. Надеюсь, что он сам работает.

Окончание обновлений

Здравствуйте,

Я получаю полное имя пользователя из нашего 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 или что, но код не изменился.

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

Спасибо.

Теги:
iis
active-directory
iis-6

1 ответ

1
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню