Не удалось получить проверку подлинности Windows для работы через локальную IIS

Итак, я создал новый проект ASP.NET MVC с использованием шаблона интрасети. web.config содержит соответствующие значения (например, <authentication mode="windows"/>).

Если я запускаю веб-приложение с помощью веб-сервера VS, все выглядит отлично - на странице отображается мой домен и имя пользователя Windows и все. Однако это работает в Opera и Safari, а также в IE и FF, в котором говорится, что он вообще не использует Windows auth (так как, насколько мне известно, это не работает ни в одном браузере, кроме IE/FF).

Следующий шаг - заставить его работать через локальный IIS. Я создаю запись файла hosts с указанием www.mysite.mydomain до 127.0.0.1. Поэтому в IIS я создаю сайт со связыванием с www.mysite.mydomain и включаю проверку подлинности Windows и отключает анонимную аутентификацию.

Я установил IE и FF, чтобы включить Windows auth следующим образом:

IE

  • Добавить URL-адрес в группу интрасети
  • Убедитесь, что Windows auth включен в дополнительных настройках

FF

Поместите 'www.mysite.mydomain' в настройку конфигурации network.automatic-ntlm-auth.trusted-uris.

Но когда я набираю www.mysite.mydomain в IE/FF, я получаю приглашение для входа. Интересно, что даже когда я ввожу свой логин в Windows, он все равно терпит неудачу и снова показывает мне приглашение для входа.

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

Я не могу думать ни о чем другом, что мне нужно сделать. Любые предложения?

Изменить: мы недавно переключились на использование Active Directory, и проблема остается.

Изменить: когда я отменяю приглашение для входа в систему, я попадаю на страницу "Подробные ошибки IIS 7.5" со следующей информацией:

Ошибка HTTP 401.2 - неавторизованный У вас нет прав на просмотр этой страницы из-за недопустимых заголовков аутентификации. **

Ответ 1

Для проверки подлинности Windows вы должны белый список указать домен, указанный в файле hosts.

Скопировано из приведенной выше ссылки для быстрого доступа:

  • Установите DisableStrictNameChecking запись реестра в 1. Для получения дополнительных сведений о том, как это сделать, обратитесь к статье 281308 в базе знаний Майкрософт
  • Нажмите "Пуск", выберите "Выполнить", введите "regedit" и нажмите "ОК".
  • В редакторе реестра найдите и затем щелкните следующий раздел реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\MSV1_0
  • Щелкните правой кнопкой мыши MSV1_0, выберите "Создать" и выберите "Многострочное значение".
  • Введите BackConnectionHostNames и нажмите клавишу ВВОД.
  • Щелкните правой кнопкой мыши BackConnectionHostNames и выберите "Изменить".
  • В поле "Значение" введите имя хоста или имена узлов для сайтов, находящихся на локальном компьютере, и нажмите "ОК".
  • Закройте редактор реестра и перезапустите службу IISAdmin.

Ответ 2

Вы пытались помещать домен перед именем пользователя?

DOMAIN\username

Если у вас нет учетной записи домена, попробуйте указать имя пользователя с именем машины:

MYCOMPUTER\myusername

Ответ 3

Недавно я провел три дня, пытаясь решить ту же проблему, и это сбило меня с ума. Это происходило при сбалансированной по нагрузке установке, где один из серверов правильно аутентифицировался, а другой - неудачен. Исследуя проблему - и в конечном итоге ее разрешив - оказалось, что она не связана с сбалансированной по нагрузке средой, она может произойти с любым сервером при аутентификации с использованием проверки подлинности Windows, а сервер вызывается с именем, отличным от имени, распознанного Active Directory

1. Включить ведение журнала Kerberos

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\Kerberos\Параметры

Добавить значение реестра LogLevel с ValueType REG_DWORD и значением 0x1.

Как только вы включите ведение журнала, вы попытаетесь выполнить аутентификацию, вы получите ошибки, зарегистрированные в вашем журнале приложений Windows. Вы можете игнорировать ошибку KDC_ERR_PREAUTH_REQUIRED (это только часть рукопожатия), но если вы получите сообщение об ошибке KDC_ERR_C_PRINCIPAL_UNKNOWN, это означает, что ваш контроллер AD не распознает ваш сервер, поэтому вам нужно чтобы выполнить следующие шаги.

2. KDC_ERR_C_PRINCIPAL_UNKNOWN

если вы получаете KDC_ERR_C_PRINCIPAL_UNKNOWN, это означает, что имя "mysite.mydomain.com" отличается от того, как AD распознает ваш компьютер, чтобы он не смог предоставить действительный билет в кеберосе. В этом случае вам необходимо зарегистрировать имя участника-службы (SPN) для "www.mysite.mydomain" в AD.

На контроллере AD запустите эту команду - вам понадобится привилегия администратора домена:

Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME

3. Используйте индивидуальный идентификатор для пула приложений

Наконец, сделайте для пула приложений использование настраиваемой учетной записи, принадлежащей Active Directory, вместо использования NetworkService. Это можно сделать в расширенных настройках вашего пула приложений.

и.. вуаля.


Примечания. Проблема может (маловероятно) быть связана с тем, что несколько SPN зарегистрированы на одном компьютере, в этом случае вам нужно будет запустить команду для удаления дублирующих SPN, но я сомневаюсь, что это так. Также попробуйте добавить другую привязку к вашему сайту (которая не использует пользовательское имя), например htttp://localhost: custom_port_number, и посмотреть, работает ли аутентификация. Если это сработает, это лишний признак того, что вы страдаете от той же проблемы, что и я.

Ответ 4

Вы должны проверить, установлена ​​ли Windows Authentication/включена. Это может показаться странным, но в IIS 7 вам необходимо установить и включить различные методы проверки подлинности. Подробнее см. http://support.microsoft.com/kb/942043/, см. Приведенный ниже раздел.

Причина 1
Веб-приложение настроено на использование встроенных окон аутентификация. Однако функция проверки подлинности Windows не включенный. Или встроенный модуль проверки подлинности Windows раздела файла ApplicationHost.config или файла Web.config не действует. Чтобы устранить эту проблему, см. Резолюцию 1.

Оригинал
Обычно, когда вы пытаетесь просмотреть веб-страницу asp.net, размещенную в IIS, и получать приглашение для входа в систему, это не означает, что ваши учетные данные не были получены или что вы не прошли аутентификацию. Это означает, что учетная запись, на которой работает ваш сайт, не имеет необходимых прав для работы с файлами.

В IIS 6 и 7 вы можете легко изменить учетную запись пользователя, в которой работает ваш пул приложений. Попробуйте изменить идентификатор пула приложений в учетной записи с большим доступом, специально разработанным для этого. Или если вы хотите придерживаться существующей учетной записи (IUSR_? Network Service?), Вы можете предоставить этой учетной записи больше разрешений в каталоге, где хранится ваш веб-сайт.

Эта статья специально предназначена для BizTalk, но почти не содержит ссылок на нее и фокусируется на устранении проблем с разрешениями в IIS и пулах приложений: http://msdn.microsoft.com/en-us/library/aa954062.aspx

Ответ 5

Почему локальный IIS? Можете ли вы использовать локальный IIS Express?

Если да, попробуйте это. По-видимому, IIS Express по умолчанию имеет проверку подлинности Windows на false.

Изменить

<windowsAuthentication enabled="false">

в "true" в файле applicationhost.config(в папке 'C:\Users [Профиль]\Documents\IISExpress\config'). Это работает для меня.

Ответ 6

Чтобы гарантировать, что IIS использует проверку подлинности Windows, я думаю, вы должны попытаться включить другие методы аутентификации. Если включена анонимная аутентификация, проверка подлинности Windows не будет работать. Вы также можете прочитать эту статью поддержки Microsoft, которая подробно описывает требования IE и IIS.

Ответ 7

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

Я исправил ошибку, добавив ниже в мой файл Web config. Под тегом system.web я изменил authentication mode="None" на authentication mode="Forms".

Под тегом appSettings я добавил add key="owin:AutomaticAppStartup" value="false"

Ответ 8

Прочитав ответ Espen Burud, я решил свою проблему, изменив в корне web.config:

<allow users="*" />

в

<deny users="?" />

Страница, для которой требуется проверка подлинности Windows, находится не в корневом каталоге, а в подкаталоге со своим собственным файлом web.config с deny users? но это не сделало проверку подлинности Windows работающей. Видимо, вам нужно запретить пользователям в корне, чтобы это работало.

В конфигурации IIS включена анонимная аутентификация; это не имело значения. После вышеуказанного изменения web.config проверка подлинности Windows сработала.

Ответ 9

Для Dot Net Core 2.2 и работы на IIS у меня были проблемы с 401.2 Unauthorized, когда я проверял Включить проверку подлинности Windows в моем приложении. Это был чрезвычайно простой тестовый веб-сайт, который ничего не делал, просто пытался заставить Windows-аутентификацию работать. Я наконец-то получил авторизацию на работу, и вот что вам нужно:

В Startup ConfigureServices:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

Откройте "Свойства приложения", нажмите "Отладка" слева и убедитесь, что вы отметили "Включить проверку подлинности Windows".

enter image description here

Но вот кикер, который я забыл... Сконфигурируйте свою систему, чтобы на IIS была установлена аутентификация Windows. Это никогда не настраивалось на моей машине, и независимо от того, что я делал, я всегда получал 401 несанкционированную ошибку. После установки этого (Win 10, IIS v10.0.18362.1) я теперь получаю приглашение для входа в систему. Это не совсем то, что мне нужно на данный момент, но, по крайней мере, это не несанкционированная ошибка. Удачи и, надеюсь, это поможет.

enter image description here