Наиболее странное поведение аутентификации Windows IIS
У меня есть веб-сайт ASP.NET, работающий на Windows Server R2 в корпоративной сети, используя проверку подлинности Windows.
- В пуле приложений на сайте используется учетная запись домена и в режиме интегрированного конвейера.
- Аутентификация выполняется при аутентификации Windows, все остальные режимы аутентификации отключены.
Однако это не работает. Каждый раз, когда я обращаюсь к веб-сайту, он выдает диалог с запросом имени пользователя и пароля. Я ввожу правильное имя и пароль пользователя домена, но он не продолжается - окна всплывают снова. Через три раза он выходит из строя и отображает белую страницу. Я пробовал со многими разными браузерами, и все они терпят неудачу. Я попросил некоторых коллег попробовать, и все они тоже потерпели неудачу.
Я не могу понять, почему эта ошибка происходит, и попробовал много способов исправить ее без везения. Я думаю, это очень странно. Однако, наконец, я нашел способ исправить эту проблему, это самая странная часть проблемы: я редактирую "Физический путь" в "Основные настройки" веб-сайта, я просто указываю на другой полезный веб-сайт, например, % SystemDrive%\inetpub\wwwroot, затем я пытаюсь просмотреть веб-сайт, очень хорошо, он работает хорошо и отображает страницу по умолчанию (iisstart.htm). Похоже, что это не очень полезно, но затем я меняю физический путь обратно на свой сайт; внезапно все идет хорошо - работает проверка подлинности Windows! Я не знаю, почему это помогает, но я доволен этим результатом - он исправляет мою проблему, хотя я не знаю, что происходит.
Счастливое время всегда короткое, через несколько дней сервер получил некоторые исправления и перезагрузился, веб-сайт не может работать снова. И снова, я могу решить проблему, используя трюк выше.
Мне это не нравится! Мне не нравится делать этот глупый трюк каждый раз, когда IIS сбрасывается или сервер перезапускается.
Есть ли у кого-нибудь идеи о том, почему проверка подлинности Windows не удается, и почему вышеупомянутый трюк может ее исправить, и почему после IIS reset он снова не работает?
Ответы
Ответ 1
Прежде всего, СПАСИБО за создание этого сообщения. У меня точно такая же проблема, и я не мог найти никого другого, не публикуя очевидные исправления, которые мне не помогли. Я работал над этим почти две недели.
Чтобы помочь следующей бедной душе, которая встречает эту проблему и публикует, я надеюсь, что мои дополнительные лакомые кусочки помогут.
Ваше первоначальное решение не исправило мою проблему в моем случае, но это доказало, что это была страница с настраиваемой ошибкой. После вставки в ваш код в web.config моя проблема ухудшилась, и я не смог отлаживать или запускать страницу (имела 500 внутренних ошибок сервера, связанных с web.config)
НО, наконец, что я сделал, я зашел в консоль IIS и удалил все мои страницы ошибок. Он все еще не работал, как надеялся. НО, я также нашел записи для ASP.NET ".NET Custom Errors" в верхней половине консоли сайта (и тег "custom errors" в web.config). У меня были старые записи и удалили их через консоль, а YESSSS, мой сайт вернулся к нормальной работе с Windows Authentication.
С тех пор я воссоздал пользовательские ошибки IIS, и я все еще работаю так, как было разработано.
SO для всех, у кого может возникнуть эта проблема, проверьте параметры пользовательских ошибок ASP.NET И IIS. Может быть, есть конфликт, я не знаю, но в моем случае установка только страниц IIS меня исправила (сейчас:-))
Ответ 2
Я просто обнаружил, что это вызвано страницами ошибок custome 401 в разделе "Страницы ошибок". Я установил его для выполнения URL-адреса, когда код состояния 401 в моем web.config выглядит так:
<httpErrors errorMode="Custom">
<remove statusCode="401" subStatusCode="-1"/>
<error statusCode="401" path="/Error/AccessDenied" responseMode="ExecuteURL"/>
</httpErrors>
Затем каждый раз, когда я reset IIS и пытается получить доступ к этому веб-сайту, возникает проблема. Если я удалю его в Web.Config или удалю с консоли IIS, проблема исчезнет, что более забавно - это еще один эксперимент: после того, как я удалил эти настройки и успешно открыл сайт, я добавил эту настройку. Все работает очень хорошо. Каждый пользователь домена может получить доступ к этому веб-сайту, те, кто не прошел авторизацию, получают страницу с ошибкой клиента.
Итак, теперь мое решение заключается в том, что я удалял этот параметр в своем Web.Config, каждый раз, когда я reset IIS или перезапускал сервер, администратору сервера сначала нужно попасть на сайт, а затем добавить эту страницу ошибок клиента в консоли IIS,
Я чувствую, что это ошибка II7.5 в Windows Server 2008 R2.
Ответ 3
Я тоже боролся с этой же проблемой весь день. Я использую проверку подлинности Windows и пользовательскую настройку ошибки в файле web.config для ошибок 401.
После я reset IIS перестает принимать пользователей домена и проверять подлинность Windows снова и снова.
Я добавил тег remove в файле web.config с кодом состояния Sub.
<httpErrors>
<remove statusCode="401" subStatusCode="-1" />
<remove statusCode="401" subStatusCode="1" />
<error statusCode="401" subStatusCode="-1" path="/Custom401.aspx" responseMode="ExecuteURL" />
<error statusCode="401" subStatusCode="1" path="/Custom401_1.aspx" responseMode="ExecuteURL" />
</httpErrors>
Ранее удаляемый тег присутствовал только для кода подстановки -1, но отсутствовал для кода суб-статуса "1". После того, как я добавил его, все началось правильно.
В приведенной выше статье отсутствует код подкаталога для тега ошибки, что может быть причиной проблемы. Там должно быть удаление тега для всех ошибок 401.
Ответ 4
Я потратил пару часов на то, чтобы решить проблему.
Почему IE еще не удается выполнить другие браузеры: IE пытается использовать проверку подлинности Kerberos, а другие браузеры не пытаются. Другие используют NTLM.
Решение: В ситуации, описанной в вопросе, в пуле приложений используется учетная запись домена. Простое решение: переключитесь на использование учетной записи "Сетевая служба". Более сложное решение: вам необходимо зарегистрировать имя участника службы (SPN). Прочитайте эту статью (игнорируйте тот факт, что речь идет о IIS 6, потому что она отлично работает и в IIS 7 и 7.5) - Вы получаете сообщение об ошибке HTTP 401.1 - Unauthorized: Сообщение об отказе из-за недействительных учетных данных "при попытке доступа к веб-сайту.
Надеюсь, это поможет. Это дало мне головную боль, пока я не наткнулся на эту статью. (Спасибо Paul Lynch, который опубликовал ссылку Аутентификация Windows, которая не работает в IE8, но не Firefox)
Ответ 5
У меня была такая же проблема на моем сервере Windows 2008 R2. У меня не было настраиваемых 401 страниц ошибок. Я использовал имена псевдонимов сервера (через записи DNS CNAME и записи заголовков узлов в привязках IIS). Я зарегистрировал SPN для Kerberos, как было предложено, но это не решило проблему. Я разрешил это, отключив "Идентификацию режима ядра" (щелкните на сервере в дереве IIS → дважды щелкните по "Идентификация" в группе IIS → щелкните "Аутентификация Windows" → щелкните "Дополнительные параметры" на панели "Действия" → Снимите флажок checkbox → нажмите OK → запустить iisreset). Информация в этом диалоговом окне рекомендует запретить аутентификацию режима ядра при использовании нестандартных учетных записей службы для идентификации пула приложений, но это не относится к нам, поскольку мы используем стандартную идентификацию ApplicationPoolIdentity.
Ответ 6
Добавьте "NT Service\trustedInstaller
" в физическую папку сайта. Местоположение для этого пользователя - имя локальной машины.
Ответ 7
Протокол NTLM, используемый для интегрированной проверки подлинности Windows, требует двухэтапного процесса аутентификации клиентов. Поведение, указанное в разделе "Признаки", происходит, когда выполняются следующие условия:
- Пул приложений перезаписывается после первого этапа процесса проверки подлинности Integrated Windows.
- Однако пул приложений перерабатывается перед вторым этапом процесса проверки подлинности Integrated Windows.
Чтобы обойти это поведение и уменьшить частоту этих сообщений об ошибках, настройте пул приложений для повторного использования реже. Чтобы настроить рециркуляцию пула приложений, выполните следующие действия:
- Нажмите "Пуск", выберите "Выполнить", введите inetmgr и нажмите "ОК".
- Разверните имя компьютера, на котором вы хотите настроить рециркуляцию пула приложений, а затем разверните пулы приложений.
- Щелкните правой кнопкой мыши пул приложений, который вы хотите настроить, и выберите "Свойства".
- На вкладке "Рециркуляция" настройте одну из показателей, чтобы IIS перерабатывал реже.
Примечание. Пулы приложений IIS 6 поддерживают несколько показателей. Эти показатели включают время, прошедшее, количество запросов и указанное время для повторного использования пула приложений. Если в пуле приложений есть метрика, которая заставляет пул приложений часто перерабатываться, вы будете чаще сталкиваться с этой проблемой.
- Нажмите "ОК".
[Скопировано из https://support.microsoft.com/en-us/kb/902160 для потомков]
Ответ 8
У меня была одна и та же проблема. Оказывается, я не должен был испортиться с моим файлом-хостом. Я изменил свой файл-хост и указал какой-то причудливый адрес на мою машину:
www.givemeyourcredentials.com 127.0.0.1
Я добавил ссылку на сайт "www.givemeyourcredentials.com". Я набрал в addres в своем адресном баре, и сайт вызвал мои учетные данные, как ожидалось. Набрал мои учетные данные и снова получил приглашение на мои учетные данные.. И снова и снова..
Оказывается: При использовании проверки подлинности Windows на сайте IIS привяжите свой веб-сайт к http://localhost.. помогло.
Надеюсь, это поможет кому-то...