Самое странное поведение IIS для проверки подлинности Windows - PullRequest
20 голосов
/ 29 июня 2010

У меня есть веб-сайт ASP.NET, работающий на Windows Server R2 в корпоративной сети с использованием аутентификации Windows.

  • Пул приложений веб-сайта использует учетную запись домена и работает в режиме интегрированного конвейера.
  • Для проверки подлинности установлена ​​проверка подлинности Windows, все остальные режимы проверки подлинности отключены.

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

Я не могу понять, почему происходит эта ошибка, и попытался исправить ее безуспешно.Я думаю, что это очень странно.Однако, наконец, я нашел способ решить эту проблему, это самая странная часть проблемы: я редактирую «Физический путь» в «Базовых настройках» веб-сайта, я просто указываю на другой здоровый веб-сайт, например,% SystemDrive% \ inetpub \ wwwroot, затем я пытаюсь просмотреть веб-сайт, очень хорошо, он хорошо работает и отображает страницу по умолчанию (iisstart.htm).Похоже, это не очень полезно, но потом я изменяю физический путь к своему веб-сайту;вдруг все идет хорошо - проверка подлинности Windows работает!Я не знаю, почему это помогает, но я доволен этим результатом - он решает мою проблему, хотя я не знаю, что, черт возьми, происходит.

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

Мне не нравится это!Мне не нравится делать этот глупый трюк каждый раз, когда IIS сбрасывает или сервер перезагружается.

Есть ли у кого-нибудь идеи, почему сбой аутентификации Windows и почему вышеупомянутый трюк может это исправить, и почему после сброса IIS он снова выходит из строя?

Ответы [ 8 ]

11 голосов
/ 17 октября 2012

Прежде всего, СПАСИБО за создание этого поста.У меня точно такая же проблема, и я не смог найти никого другого, не опубликовав очевидные исправления, которые мне не помогли.Я работал над этим почти две недели

Чтобы помочь следующей бедной душе, которая столкнулась с этой проблемой и сообщением, я надеюсь, что мои дополнительные лакомые кусочки помогут.

Ваше первоначальное решение не решило мою проблемув моем случае, но это доказало, что это было связано с пользовательской ошибкой.После вставки вашего кода в web.config моя проблема усугубилась, и я не смог отладить или запустить страницу (имелась 500 внутренних ошибок сервера, связанных с web.config)

НО наконец то, что я сделал, это вошел вконсоль IIS и удалите все мои пользовательские страницы ошибок.Это все еще не работает, как надеялся.НО, я также нашел записи для ASP.NET "Пользовательские ошибки .NET" в верхней половине консоли сайта (и тег "пользовательские ошибки" в web.config).У меня были старые записи там, и я удалил их через консоль, и YESSSS, мой сайт вернулся в нормальное состояние с проверкой подлинности Windows.

С тех пор я воссоздал пользовательские ошибки IIS, и я все еще работаю, как было задумано.

ТАК чтобы всем, у кого может быть эта проблема, проверьте настройки пользовательских ошибок ASP.NET И Пользовательские ошибки IIS.Может быть, есть конфликт, я не знаю, но в моем случае исправили только настроенные страницы IIS (пока :-))

6 голосов
/ 17 февраля 2012

Я тоже весь день боролся с этой проблемой. Я использую проверку подлинности Windows и пользовательские настройки ошибок в web.config для ошибок 401. После сброса IIS веб-сайт перестает принимать пользователей домена, и всплывающее окно проверки подлинности Windows снова и снова появляется.

Я добавил тег удаления в файле 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 ошибок.

6 голосов
/ 01 июля 2010

Я только что обнаружил, что это вызвано обычными страницами ошибок 401 в разделе «Страницы ошибок». Я настроил его на выполнение URL-адреса, когда код состояния 401 в моем файле web.config выглядит следующим образом:

 <httpErrors errorMode="Custom">
 <remove statusCode="401" subStatusCode="-1"/>
    <error statusCode="401" path="/Error/AccessDenied" responseMode="ExecuteURL"/>
 </httpErrors>

Тогда каждый раз, когда я сбрасываю IIS и пытаюсь получить доступ к этому сайту, проблема появляется. Если я удаляю его в Web.Config или удаляю из консоли IIS, то проблема исчезает, что более забавно, это еще один эксперимент: после того, как я удалил эти настройки и успешно открыл сайт, я добавил эту настройку обратно. Все работает очень хорошо. Каждый пользователь домена может получить доступ к этому сайту, те, кто не прошел авторизацию, получают страницу с ошибкой клиента.

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

Мне кажется, что это ошибка II7.5 в Windows Server 2008 R2.

3 голосов
/ 01 февраля 2013

Я просто потратил пару часов, чтобы найти решение этой проблемы.

Почему IE не работает, но другие браузеры работают успешно: IE пытается использовать аутентификацию Kerberos, а другие браузеры не пытаются.Другие используют NTLM.

Решение: В ситуации, описанной в вопросе, в пуле приложений использовалась учетная запись домена.Простое решение: перейти на учетную запись «Сетевой сервис».Более сложное решение: необходимо зарегистрировать имя участника службы (SPN).Прочитайте эту статью (не обращайте внимания на тот факт, что речь идет об IIS 6, потому что он также отлично работает на IIS 7 и 7.5) - При появлении сообщения об ошибке «HTTP Error 401.1 - Unauthorized: Access deniedable from validable dendentials»Вы пытаетесь получить доступ к веб-сайту .

Надеюсь, это поможет.У меня болела голова, пока я не наткнулся на эту статью.(Спасибо Полу Линчу, который разместил ссылку Ошибка аутентификации Windows в IE8, но не Firefox )

1 голос
/ 23 июля 2013

У меня была такая же проблема на моем сервере Windows 2008 R2. У меня не было пользовательских 401 страниц с ошибками. Я использовал псевдонимы серверов (через записи DNS CNAME и записи заголовков узлов в привязках IIS). Я зарегистрировал имена участников-служб для Kerberos, как и предлагалось, но это не решило проблему. Я решил эту проблему, отключив «Аутентификацию в режиме ядра» (нажмите на сервере в дереве IIS -> дважды щелкните «Аутентификация» в группе IIS -> нажмите «Аутентификация Windows» -> нажмите «Дополнительные параметры» на панели «Действия» -> Снимите флажок -> нажмите ОК -> запустить iisreset). Информация в этом диалоговом окне не рекомендуется отключать проверку подлинности в режиме ядра при использовании нестандартных учетных записей служб для идентификации пула приложений, но это не относится к нам, поскольку мы используем стандартную идентификацию ApplicationPoolIdentity.

0 голосов
/ 12 января 2018

У меня была та же проблема .. Оказывается, мне не следовало портить мой хост-файл .. Я изменил свой хост-файл и указал на свой компьютер какой-то необычный адрес, например:

www.givemeyourcredentials.com    127.0.0.1

Я добавил привязкуна сайт "www.givemeyourcredentials.com".Я набрал адрес в моей адресной строке, и сайт запросил мои учетные данные, как и ожидалось .. Набрал свои учетные данные и снова получил запрос на ввод учетных данных .. И снова, и снова, и снова ..

Получается: Привязывайте свой веб-сайт к http://localhost при использовании проверки подлинности Windows на сайте IIS. Это помогло мне.

Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 18 мая 2015

Протокол NTLM, используемый для встроенной проверки подлинности Windows, требует двухэтапного процесса проверки подлинности клиентов. Поведение, упомянутое в разделе «Проблема», возникает, когда выполняются следующие условия:

  • Пул приложений перезапускается после первого шага процесса встроенной проверки подлинности Windows.
  • Однако пул приложений перезапускается до второго шага процесса встроенной проверки подлинности Windows.

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

  1. Нажмите Пуск, нажмите Выполнить, введите inetmgr и нажмите кнопку ОК.
  2. Разверните имя компьютера, на котором вы хотите настроить перезапуск пула приложений, а затем разверните Пулы приложений.
  3. Щелкните правой кнопкой мыши пул приложений, который вы хотите настроить, и выберите Свойства.
  4. На вкладке «Переработка» настройте один из показателей, чтобы IIS перезапускался реже.

Примечание. Пулы приложений IIS 6 поддерживают несколько метрик. Эти метрики включают истекшее время, количество запросов и указанное время для перезапуска пула приложений. Если у пула приложений есть метрика, которая заставляет пул приложений часто перезагружаться, эта проблема возникает чаще.

  1. Нажмите ОК.

[Скопировано с https://support.microsoft.com/en-us/kb/902160 для потомков]

0 голосов
/ 24 марта 2011

Добавить "NT Service\trustedInstaller" в физическую папку сайта.Местоположение для этого пользователя - имя локального компьютера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...