Получение приглашения для входа с помощью встроенной проверки подлинности 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

В моем случае настройки авторизации были настроены неправильно.

Мне пришлось

  • откройте правила авторизации .NET в диспетчере IIS

    open the .NET Authorization Rules in IIS Manager
  • и удалить правило Запретить

    remove the Deny Rule

Ответ 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 введите описание изображения здесь