Получение приглашения для входа с помощью встроенной проверки подлинности Windows
У меня есть приложение .NET 3.5, работающее под управлением IIS 7 на сервере Windows 2003, и не могу получить интегрированную проверку подлинности Windows, поскольку я продолжаю запрашивать логин. Я установил проверку подлинности Windows в IIS, когда отключены все другие типы безопасности, и моя аутентификация/авторизация файла приложения web.config установлена как:
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
<authenticationmode="Windows"/>
<authorization>
<deny users = "?" />
</authorization>
</system.web>
С помощью этой настройки я ожидаю, что вы подтвердите правку пользователя Windows, чтобы разрешить доступ и запретить анонимным пользователям. Тем не менее, я получаю всплывающее имя входа Windows, когда я пытаюсь получить доступ к сайту.
Я искал эту проблему в течение нескольких дней и не могу решить проблему. Основываясь на сообщениях с похожими проблемами, я подтвердил, что мой URL-адрес не включает никаких периодов, дважды проверьте, что для моих настроек IE установлено значение Включить встроенную проверку подлинности Windows, а также добавлен мой URL-адрес на мои сайты интрасети, но все еще появляется всплывающее окно.
Чтобы устранить эту проблему дальше, я включил анонимную аутентификацию в IIS и изменил свой файл web.config, на который позволяет мне войти, а затем добавить Response.Write(System.Security.Principal.WindowsIdentifity.getcurrent(). user.name. toString()), чтобы попытаться выяснить, какой пользователь используется в аутентификации. Результатом, который я получаю, является IIS APPPOOL\myapp, который, очевидно, является пулом приложений IIS для моего приложения.
Я очень ценю любую помощь, которую любой может предоставить, чтобы я все еще использовал только проверку подлинности Windows, но не получаю всплывающее окно, и проверка подлинности Windows выполняется против фактического пользователя Windows.
Спасибо.
Дополнительное примечание после устранения неполадок:
Только что заметили, что при неудачной попытке входа в систему и появлении приглашения на вход в Windows отображается имя пользователя, которое пыталось войти в систему как "СЕРВЕРНЫЙ" \ "ИМЯ ПОЛЬЗОВАТЕЛЯ", что привело меня к тому, что он пытался проверить пользователя на сервере по сравнению с доменом. Чтобы подтвердить это, я создал локальную учетную запись пользователя непосредственно на сервере приложений с тем же именем пользователя и паролем, что и пользователь сетевого домена, и попытался снова войти в систему. В результате я снова получил приглашение для входа, но когда я ввел имя пользователя и пароль на этот раз, я смог успешно войти в систему. Сетевой пользователь и сервер приложений находятся в одном домене, поэтому не уверен, почему аутентификация IIS указывает на учетные записи локального сервера приложений, а не на учетные записи домена. Я понимаю, что это вопрос IIS на этом этапе, поэтому отправляйте его на forums.iis.net, но оцените любые советы, которые могут возникнуть с тех пор, как это устраняло проблемы в течение нескольких дней.
Ответы
Ответ 1
У меня есть сервер Windows 2008, над которым я работаю, поэтому мой ответ не совсем такой же, как у OP на сервере Windows 2003.
Вот что я сделал (записывая это здесь, чтобы найти его позже).
У меня была такая же проблема:
![login prompt]()
В моем файле Web.config у меня был этот раздел:
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>
В IIS все они, кажется, решаются с помощью значка Аутентификация.
- Изменить разрешения: убедитесь, что у вашей учетной записи ASP.NET есть разрешение. Шахта не была первоначально добавлена.
![ASP.NET permission]()
Теперь перейдите в функции Аутентификация:
![Authentication Features]()
Включить Анонимную аутентификацию с помощью IUSR
:
![Anonymous Authentication]()
Включить Аутентификация Windows, затем щелкните правой кнопкой мыши, чтобы установить Провайдеры.
NTLM должен быть FIRST!
![Windows Authentication]()
Затем проверьте, что в разделе Дополнительные настройки... Расширенная защита Принять и Включить аутентификацию в режиме ядра. strong > ПРОВЕРЕН:
![Advanced Settings]()
Как только я это сделал, я вернулся к своему веб-приложению, нажал ссылку "Обзор" и вошел в систему, не предоставляя свои учетные данные снова.
Я надеюсь, что это окажется полезным для многих из вас, и я надеюсь, что это будет полезно и мне позже.
Ответ 2
У меня была аналогичная проблема, в которой я хотел защитить только определенную часть моего веб-сайта. Все работало хорошо, за исключением IE. У меня есть анонимная и Windows Authentication.
Для анонимных пользователей Identity устанавливается на идентификатор пула приложений. Проблема была в Windows Authentication. После некоторого копания я запустил скрипача и обнаружил, что он использует Kerberos в качестве провайдера (на самом деле он настроен на Negotiate по умолчанию). Я переключил его на NTLM и исправил его.
НТН
Дауди
Ответ 3
Просто для других людей. Если ошибка равна 401.1 Unauthorized
, а ваш код ошибки соответствует 0xc000006d
, тогда вы фактически выполняете функцию безопасности, которая блокирует запросы к FQDN или пользовательским заголовкам хоста, которые не соответствуют вашему локальному имени компьютера:
Следуйте этой статье поддержки, чтобы устранить проблему:
http://support.microsoft.com/kb/896861
Это заняло у меня некоторое время, потому что все остальные комментарии здесь не помогли мне. Я нашел эту статью и исправил ее!
Ответ 4
Добавить разрешение [Пользователи домена] на вашу безопасность в Интернете.
- Щелкните правой кнопкой мыши на своем сайте в IIS в папке "Сайты"
- Нажмите "Редактировать разрешения"...
- Выберите вкладку "Безопасность"
- В разделе Группа или пользовательские имена нажмите кнопку "Изменить..."
- В окне "Разрешения" под именами групп или пользователей нажмите "Добавить".
- Введите [имена пользователей домена] в именах объектов, чтобы выбрать текстовую область, и нажмите "ОК" , чтобы применить изменение
- Нажмите "ОК" , чтобы закрыть всплывающее окно "Права доступа".
- Нажмите "ОК" , чтобы закрыть "Свойства" и применить новые настройки.
Ответ 5
Не создавайте ошибок на своем сервере, изменяя все. Если у вас есть окно для входа в систему при использовании проверки подлинности Windows в 2008 R2, просто перейдите к Providers
и переместите UP NTLM
для каждого вашего приложения.
Когда Negotiate
является первым в списке, Windows Authentication может перестать работать с определенным приложением в 2008 R2, и вам может быть предложено ввести имя пользователя и пароль, чем никогда не работать. Это случается, когда вы делаете обновление своего приложения. Просто убедитесь, что NTLM
первый в списке, и вы больше никогда не увидите эту проблему.
Ответ 6
Может быть связано с браузером. Если вы используете IE, вы можете перейти в "Дополнительные параметры" и установить флажок "Включить встроенную проверку подлинности Windows".
Ответ 7
Это исправило это для меня.
Мой сервер и клиентский ПК - это Windows 7 и находятся в одном домене
-
в iis7.5 - включить проверку подлинности Windows для вашей интрасети (отключить всю другую аутентификацию.. также нет необходимости упоминать проверку подлинности Windows в файле web.config
-
затем перейдите на клиентский ПК. IE8 или 9-Tools-internet Options-Security-Local Intranet-Sites-advanced-Добавьте свой сайт (снимите флажок "require server verfi...". нет необходимости
-
IE8 или 9-Tools-internet Options-Security-Local Intranet-Custom level-userauthentication-logon-select автоматический вход в систему с текущим именем пользователя и паролем
-
Сохраните эти настройки. Вы закончили.. Больше не запрашивайте имя пользователя и пароль.
-
Удостоверьтесь, что, поскольку ваш клиентский ПК является частью домена, у вас должен быть объект групповой политики для этих параметров... orelse этот параметр вернется обратно при входе пользователя в Windows в следующий раз
Ответ 8
WindowsIdentity.GetCurrent
верен: вы должны получить пользователя APPPOOL. Это связано с тем, что процесс ASP.NET, выполняющий ваш код, является текущим идентификатором. Если вы хотите, чтобы пользователь ударил идентификатор сайта, вам нужно добавить следующую строку в свой web.config:
<identity impersonate="true" />
Это заставляет процесс принимать личность пользователя, запрашивающего страницу. Все действия будут выполняться от их имени, поэтому любые попытки чтения папок в сети или доступа к ресурсам базы данных и тому подобное будут означать, что текущему пользователю потребуются разрешения на эти вещи. Вы можете больше узнать о олицетворении здесь. Обратите внимание, что в зависимости от того, как настроена ваша топология веб-сервера базы данных, вы можете столкнуться с проблемами делегирования с включенной олицетворением.
Но ваша оригинальная проблема заключается в том, что, похоже, идентификатор не может быть определен, и вы получаете всплывающее окно входа в систему. Я отмечаю, что вам не нужен блок <deny>
, если вы отключили анонимную аутентификацию в IIS. Мы никогда не включаем его (за исключением специальных блоков <location>
и т.д.), Поэтому я бы сказал, что вы можете попробовать удалить его и повторить попытку. Все остальное звучит правильно.
Вы не указали, какой пользователь запускает пул приложений в IIS. Это пользовательская учетная запись или она по умолчанию? Если это обычай, это учетная запись домена или локальная учетная запись на веб-сервере? Пользовательским учетным записям иногда может потребоваться еще несколько шагов, например, регистрация SPN. Кроме того, может возникнуть проблема с тем, что пользовательская учетная запись не имеет разрешения в AD для разрешения входящей учетной записи пользователя.
Вы также можете проверить журналы IIS, чтобы узнать, какой ответ возвращается. Скорее всего, это будет 401, но у него должен быть дополнительный номер после 401.2 или что-то еще. Этот подканал иногда помогает определить корневую проблему. В этой статье статьи KB перечислены пять.
Ответ 9
В моем случае настройки авторизации были настроены неправильно.
Мне пришлось
Ответ 10
Если ваш URL-адрес имеет точки в имени домена, IE будет рассматривать его как интернет-адрес, а не локальный. У вас есть как минимум два варианта:
- Получить псевдоним для использования в URL-адресе для замены server.domain. Например, myapp.
- Выполните следующие действия на вашем компьютере.
Перейдите на сайт и отмените диалог входа в систему. Пусть это произойдет:
![введите описание изображения здесь]()
В настройках IE:
![введите описание изображения здесь]()
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 11
Я просто решил аналогичную проблему с приложением ASP.Net.
Симптомы:
Я мог бы войти в мое приложение, используя локального пользователя, но не пользователя домена, даже если машина была правильно присоединена к домену (как вы говорите в дополнительной заметке). В средстве просмотра событий безопасности произошло событие с ID = 4625 "Недопустимый sid sid".
Решение:
Я нашел решение здесь. Проблема заключалась в том, что мои тестовые машины, где клонировали виртуальные машины (Windows Server 2008 R2, один контроллер домена и один веб-сервер). Оба имеют одинаковый SID машины, что, по-видимому, вызвало проблемы. Вот что я сделал:
- Удалите веб-сервер из домена.
- Запустите c:\Windows\System32\Sysprep\Sysprep.exe в виртуальной машине.
- Перезагрузите виртуальную машину.
- Присоедините веб-сервер к домену.
Вы теряете некоторые настройки в процессе (пользовательские настройки, статический IP-адрес, воссоздайте самозаверяющий сертификат), но теперь, когда я их воссоздал, все работает правильно.
Ответ 12
В нашей интрасети проблема была решена на стороне клиента путем настройки параметров безопасности, как показано здесь. Любой из флажков справа работал для нас.
![Свойства обозревателя IE]()
Ответ 13
Вы пробовали войти в систему с помощью префикса домена, например. Домен\Имя пользователя? IIS 6 по умолчанию использует хост-компьютер как домен по умолчанию, поэтому определение домена при входе в систему может решить проблему.
Ответ 14
У меня тоже была такая же проблема. Пробовал большинство вещей, найденных на этом и других форумах.
Наконец, это было успешным после выполнения небольшого собственного RnD.
Я вошел в Настройки IIS, а затем на мой сайт разрешение добавила мою группу пользователей домена организаций.
Теперь, когда всем пользователям моего домена был предоставлен доступ к этому сайту, я не сталкивался с этой проблемой.
Надеюсь, что это поможет
Ответ 15
Я пробовал описанные выше трюки конфигурации IIS и взлома реестра loopback, и я просмотрел и обновил разрешения для пула приложений и еще дюжину других вещей и до сих пор не смог избавиться от цикла проверки подлинности на моей рабочей станции разработки с помощью IIS Express или IIS 7.5, с локального или удаленного сеанса просмотра. Я получил четыре ответа статуса 401.2 и пустую страницу. Точно такой же сайт, развернутый на моем промежуточном сервере IIS 8.5, работает безупречно.
Наконец, я заметил разметку в Body Response, которая была пуста браузером, содержала страницу по умолчанию для успешного входа в систему. Я определил, что обработка пользовательских ошибок для ASP.NET и HTTP для ошибки 401 предотвращала/мешала Windows Аутентификация моей рабочей станции, но не промежуточного сервера. Я провел несколько часов, играя с этим, но как только я удалил пользовательскую обработку только для ошибки 401, рабочая станция вернулась к норме. Я представляю это еще один способ стрелять в вашу собственную ногу.
Ответ 16
Проверка подлинности Windows в IIS7.0 или IIS7.5 не работает с kerberos (provider = Negotiate)
когда идентификатор пула приложений является ApplicationPoolIdentity
Нужно использовать сетевую службу или другую встроенную учетную запись.
Другая возможность - использовать NTLM, чтобы заставить Windows Authenticatio работать (в Windows Authentication, Providers, поставить NTLM сверху или удалить переговоры)
chris van de vijver
Ответ 17
У меня была та же проблема, что и пользователь (Identity), который я использовал в пуле приложений, не был ниже для группы IIS_IUSRS. Добавлен пользователь в группу, и все работает
Ответ 18
В моем случае решение было (помимо приведенных выше настроек) на перезагрузить локальный компьютер разработки /IIS (хостинг-сервер) моих/пользователей.
Мой пользователь только что был добавлен во вновь созданную группу безопасности AD, а политика не применима к учетной записи пользователя AD, пока я не вышла из системы/перезагрузила компьютер.
Надеюсь, это поможет кому-то.
Ответ 19
Я столкнулся с тем же вопросом, что и запрос, и сделал быстрый поиск, и ничто в Интернете не исправит его. Потребовалось время, чтобы найти проблему, глупую.
В IIS → Предварительная настройка → Учетные данные физического пути (пуст)
Как только я добавил идентификатор машины (домен/пользователь), который имеет доступ к VM/серверу, запрос пароля остановится.
Надеюсь, что это поможет
Ответ 20
У меня была эта проблема на .net core 2, и после прохождения большинства предложений отсюда кажется, что мы пропустили настройку на web.config
<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
Правильная настройка была forwardWindowsAuthToken = "true" , которая кажется очевидной сейчас, но когда есть так много ситуаций для одной и той же проблемы, сложнее определить
Изменить: я также нашел полезным статью Msdn, которая устраняет проблему.
Ответ 21
У меня такая же проблема, и она была решена путем изменения идентификатора пула приложений пула приложений, под которым веб-приложение работает в NetworkService
![введите описание изображения здесь]()