Невозможно заставить Windows-аутентификацию работать через локальный IIS - PullRequest
64 голосов
/ 12 сентября 2011

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

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

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

Я настроил IE и FF для включения аутентификации Windows следующим образом:

IE

  1. Добавить URL-адрес в группу интрасети
  2. Убедитесь, что в дополнительных настройках включена аутентификация Windows

FF

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

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

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

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

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

Редактировать: когда я отменяю приглашение к входу в систему, я получаю «Подробную ошибку IIS 7.5»'страница со следующей информацией:

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

Ответы [ 8 ]

123 голосов
/ 22 октября 2012

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

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

  1. Установите DisableStrictNameChecking Запись реестра 1. Для получения дополнительной информации о том, как это сделать, обратитесь к статье 281308 в Базе знаний Майкрософт
  2. Нажмите Пуск, нажмите Выполнить, введите regedit и нажмите кнопку ОК.
  3. В редакторе реестра найдите и щелкните следующий раздел реестра: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
  4. Щелкните правой кнопкой мыши MSV1_0, выберите пункт Новый, а затем выберите Многостроковое значение.
  5. Введите BackConnectionHostNames и нажмите клавишу ВВОД.
  6. Щелкните правой кнопкой мыши BackConnectionHostNames и выберите команду «Изменить».
  7. В поле «Значение» введите имя хоста или имена хостов для сайтов, находящихся на локальном компьютере, и нажмите кнопку ОК.
  8. Закройте редактор реестра и перезапустите службу IISAdmin.
6 голосов
/ 12 сентября 2011

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

DOMAIN\username

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

MYCOMPUTER\myusername
5 голосов
/ 27 октября 2012

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

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

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

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA \ Kerberos \ Parameters

Добавить значение реестра 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 распознает ваш компьютер, поэтому он не может предоставить действительный билет Kerberos. В этом случае вам нужно зарегистрировать имя участника службы (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 голосов
/ 21 декабря 2011

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

Причина 1
Веб-приложение настроено на использование интегрированной Windows аутентификация. Однако функция проверки подлинности 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

3 голосов
/ 25 октября 2012

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

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

Измените

<windowsAuthentication enabled="false">

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

2 голосов
/ 26 декабря 2011

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

0 голосов
/ 19 июня 2019

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

<allow users="*" />

до

<deny users="?" />

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

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

0 голосов
/ 14 апреля 2016

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

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

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

...