Подтвердить что ты не робот

Наиболее странное поведение аутентификации Windows IIS

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

  • В пуле приложений на сайте используется учетная запись домена и в режиме интегрированного конвейера.
  • Аутентификация выполняется при аутентификации Windows, все остальные режимы аутентификации отключены.

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

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

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

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

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

4b9b3361

Ответ 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 поддерживают несколько показателей. Эти показатели включают время, прошедшее, количество запросов и указанное время для повторного использования пула приложений. Если в пуле приложений есть метрика, которая заставляет пул приложений часто перерабатываться, вы будете чаще сталкиваться с этой проблемой.

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

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

Ответ 8

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

www.givemeyourcredentials.com    127.0.0.1

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

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

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