Получение приглашения для входа с помощью встроенной проверки подлинности Windows
У меня есть приложение .NET 3.5, работающее под управлением IIS 7 на сервере Windows 2003, и не удается получить интегрированную проверку подлинности Windows, поскольку я продолжаю запрашивать логин. Я установил проверку подлинности Windows в IIS, когда отключены все другие типы безопасности, и мое аутентификация / авторизация файла web.config приложения установлена как:
С этой настройкой я ожидаю, что за сценой проверят пользователя Windows, чтобы разрешить доступ и запретить анонимным пользователям. Однако, когда я пытаюсь получить доступ к сайту, то, что я получаю, является всплывающим окном Windows.
Я исправляю эту проблему в течение нескольких дней и не могу решить проблему. Основываясь на сообщениях с похожими проблемами, я подтвердил, что мой URL не включает никаких периодов, дважды проверял, что для моих настроек IE установлено значение Включить встроенную проверку подлинности Windows, а также добавлен мой URL-адрес на мои сайты интрасети, но все еще появляется всплывающее окно.
- Проверка нокаута
- Пользовательская проверка MVC: сравнить две даты
- Бесконечная петля с cin при наборе строки, в то время как число ожидается
- Как установить атрибут maxlength на h: inputTextarea
- Добавление базового HTTP-аутентификации в службу WCF REST
Чтобы устранить эту проблему дальше, я включил анонимную аутентификацию в 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, но оцените любые советы, которые могут возникнуть с тех пор, как это устраняло проблемы в течение нескольких дней.
- jquery получает только все html-элементы с идентификаторами
- Инструмент проверки XML-схемы (XSD)?
- Angularjs препятствуют отправке формы при неудачной проверке ввода
- Установить проверку classа для динамического текстового поля в таблице
- ASP.NET MVC - Пользовательское сообщение проверки для типов значений
- Проверка HTML5 перед отправкой ajax
- Потенциально опасное значение Request.Form было обнаружено у клиента
- Использование DataAnnotations с платформой Entity Framework
У меня есть сервер Windows 2008, над которым я работаю, поэтому мой ответ не совсем такой же, как у OP на сервере Windows 2003.
Вот что я сделал (записывая это здесь, чтобы найти его позже).
У меня была такая же проблема:
В моем файле Web.config у меня был этот раздел:
В IIS все они, похоже, решаются под значком « Идентификация» .
- Разрешения редактирования. Убедитесь, что у вашей учетной записи ASP.NET есть разрешение. Первоначально месторождение не было добавлено.
Теперь перейдите в функции проверки подлинности :
Включить анонимную аутентификацию с помощью IUSR
:
Включите проверку подлинности Windows , затем щелкните правой кнопкой мыши, чтобы установить поставщиков .
NTLM должен быть ПЕРВЫМ!
Затем проверьте, что в разделе « Расширенные настройки … расширенная защита принимается и разрешает проверку подлинности в режиме ядра». CHECKED:
Как только я это сделал, я вернулся к своему веб-приложению, нажал ссылку «Обзор» и вошел в систему, не предоставив свои учетные данные снова.
Надеюсь, это окажется полезным для многих из вас, и я надеюсь, что это будет полезно и мне позже.
Просто для других людей. Если ошибка 401.1 Unauthorized
а ваш код ошибки соответствует 0xc000006d
, тогда вы фактически выполняете функцию безопасности, которая блокирует запросы к FQDN или пользовательским заголовкам хоста, которые не соответствуют вашему локальному имени компьютера:
Следуйте этой статье поддержки, чтобы устранить проблему:
http://support.microsoft.com/kb/896861
Мне это помогло, потому что комментарии остальных не помогли мне. Я нашел эту статью и исправил ее!
У меня была аналогичная проблема, в которой я хотел защитить только определенную часть моего веб-сайта. Все работало хорошо, за исключением IE. У меня есть анонимная и Windows Authentication. Для анонимных пользователей Identity устанавливается на идентификатор пула приложений. Проблема была в Windows Authentication. После некоторого копания я запустил скрипача и обнаружил, что он использует Kerberos в качестве провайдера (на самом деле он настроен на Negotiate по умолчанию). Я переключил его на NTLM и исправил его. НТН
Дауди
Добавьте разрешение [Пользователи домена] в вашу безопасность в Интернете.
- Щелкните правой кнопкой мыши на своем сайте в IIS в папке «Сайты»
- Нажмите «Редактировать разрешения» …
- Перейдите на вкладку «Безопасность»
- В разделе Группа или пользовательские имена нажмите кнопку Изменить …
- В окне «Разрешения» под именами групп или пользователей нажмите «Добавить» …
- Введите [имена пользователей домена] в именах объектов, чтобы выбрать текстовую область, и нажмите «ОК», чтобы применить изменение
- Нажмите «ОК», чтобы закрыть всплывающее окно «Разрешения».
- Нажмите «ОК», чтобы закрыть окно «Свойства» и применить новые настройки.
Не создавайте ошибок на своем сервере, изменяя все. Если у вас есть окно для входа в систему при использовании проверки подлинности Windows в 2008 R2, просто перейдите в Providers
и переместите NTLM
для каждого приложения. Когда Negotiate
является первым в списке, Windows Authentication может перестать работать для определенного приложения в 2008 R2, и вам может быть предложено ввести имя пользователя и пароль, чем никогда не работать. Это случается, когда вы делаете обновление своего приложения. Просто убедитесь, что NTLM
первым в списке, и вы больше никогда не увидите эту проблему.
Это исправило это для меня.
Мой сервер и клиентский ПК – это 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 в следующий раз
Может быть связано с браузером. Если вы используете IE, вы можете перейти в «Дополнительные параметры» и установить флажок «Включить встроенную проверку подлинности Windows».
Если ваш URL-адрес имеет точки в доменном имени, IE будет рассматривать его так, как будто это интернет-адрес, а не локальный. У вас есть как минимум два варианта:
- Получите псевдоним, который будет использоваться в URL-адресе для замены server.domain. Например, myapp.
- Выполните следующие действия на вашем компьютере.
Перейдите на сайт и отмените диалог входа в систему. Пусть это произойдет:
В настройках IE:
WindowsIdentity.GetCurrent
правильный: вы должны получить пользователя APPPOOL. Это связано с тем, что процесс ASP.NET, выполняющий ваш код, является текущим идентификатором. Если вы хотите, чтобы пользователь возвращал идентификатор сайта, вам нужно добавить следующую строку в свой web.config:
Это заставляет процесс принимать личность пользователя, запрашивающего страницу. Все действия будут выполняться от их имени, поэтому любые попытки чтения папок в сети или доступа к ресурсам базы данных и тому подобное будут означать, что текущему пользователю потребуются разрешения на эти вещи. Здесь вы можете больше узнать о олицетворении. Обратите внимание, что в зависимости от того, как настроена топология веб-сервера базы данных, вы можете столкнуться с проблемами делегирования с включенным олицетворением.
Но ваша первоначальная проблема заключается в том, что, похоже, идентификация не может быть определена, и вы получаете всплывающее окно входа в систему. Я заметил, что вам не нужен блок
если вы отключили анонимную аутентификацию в IIS. Мы никогда не включаем его (кроме специальных блоков
и т. Д.), Поэтому я бы сказал, что вы можете попробовать удалить его и повторить попытку. Все остальное звучит правильно.
Вы не указали, какой пользователь запускает пул приложений в IIS. Это пользовательская учетная запись или она по умолчанию? Если это обычай, это учетная запись домена или локальная учетная запись на веб-сервере? Пользовательским учетным записям иногда может потребоваться еще несколько шагов, например, регистрация SPN. Кроме того, может возникнуть проблема с тем, что пользовательская учетная запись не имеет разрешения в AD для разрешения учетной записи входящего пользователя.
Вы также можете проверить журналы IIS, чтобы узнать, какой ответ возвращается. Скорее всего, это будет 401, но у него должен быть дополнительный номер после 401.2 или что-то еще. Этот подканал иногда помогает определить корневую проблему. В этой статье KB перечислены пять.
В моем случае настройки авторизации были настроены неправильно.
Мне пришлось
-
открыть правила авторизации .NET в диспетчере IIS
-
и удалите правило Deny
В нашей интрасети проблема была решена на стороне клиента, изменив настройки в безопасности, как показано здесь. Любой из флажков справа работал для нас.
Я просто решил аналогичную проблему с приложением ASP.Net.
Признаки: я мог войти в мое приложение, используя локального пользователя, но не пользователя домена, даже если машина была правильно присоединена к домену (как вы говорите в дополнительной заметке). В средстве просмотра событий безопасности было событие с ID = 4625 «Недопустимый sid sid».
Решение. Я нашел решение здесь . Проблема заключалась в том, что мои тестовые машины, где клонировали виртуальные машины (Windows Server 2008 R2, один controller домена и один веб-сервер). Оба имеют одинаковый SID машины, что, по-видимому, вызвало проблемы. Вот что я сделал:
- Удалите веб-сервер из домена.
- Запустите c: \ Windows \ System32 \ Sysprep \ Sysprep.exe в виртуальной машине.
- Перезагрузите виртуальную машину.
- Присоедините веб-сервер к домену.
Вы теряете некоторые настройки в процессе (пользовательские настройки, статический IP-адрес, воссоздайте самозаверяющий сертификат), но теперь, когда я их воссоздал, все работает правильно.
У меня тоже была такая же проблема. Пробовал большинство вещей, найденных на этом и других форумах.
Наконец, был успешным после выполнения небольшого собственного RnD.
Я зашел в настройки IIS, а затем в настройки моего веб-сайта добавлены мои группы пользователей домена.
Теперь, когда всем моим пользователям домена был предоставлен доступ к этому сайту, я не сталкивался с этой проблемой.
Надеюсь это поможет
Вы пробовали войти в систему с помощью префикса домена, например DOMAIN \ Username? IIS 6 по умолчанию использует хост-компьютер как домен по умолчанию, поэтому определение домена при входе в систему может решить проблему.
Я пробовал вышеупомянутые трюки конфигурации IIS и перехват реестра loopback, и я просмотрел и обновил разрешения для пула приложений и еще дюжину других вещей и до сих пор не смог избавиться от цикла проверки подлинности на моей рабочей станции разработки с помощью IIS Express или IIS 7.5, с локального или удаленного сеанса просмотра. Я получил четыре ответа статуса 401.2 и пустую страницу. Точно такой же сайт, развернутый на моем промежуточном сервере IIS 8.5, работает безупречно.
Наконец, я заметил разметку в Body Response, которая была пуста браузером, содержала страницу по умолчанию для успешного входа в систему. Я решил, что обработка пользовательских ошибок для ASP.NET и HTTP для ошибки 401 предотвращает / мешает аутентификации Windows моей рабочей станции но не промежуточного сервера. Я провел несколько часов, играя с этим, но как только я удалил пользовательскую обработку только для ошибки 401, рабочая станция вернулась к норме. Я представляю это еще один способ стрелять собственной ногой.
Аутентификация Windows в IIS7.0 или IIS7.5 не работает с kerberos (provider = Negotiate), когда идентификатор пула приложений является ApplicationPoolIdentity. Необходимо использовать Network Service или другую учетную запись. Другая возможность – использовать NTLM, чтобы заставить Windows Authenticatio работать (в Windows Authentication, Providers, поставить NTLM сверху или удалить переговоры)
chris van de vijver
У меня была та же проблема, что и пользователь (Identity), который я использовал в пуле приложений, не был ниже для группы IIS_IUSRS. Добавлен пользователь в группу, и все работает
В моем случае решение было (помимо рекомендованных выше настроек) перезапустить локальный компьютер / IIS для хостинга (хостинг-сервер). Мой пользователь только что был добавлен во вновь созданную группу безопасности AD – и политика не применима к учетной записи пользователя AD, пока я не выйду из системы и не перезапустил мой компьютер.
Надеюсь, это поможет кому-то.
Я столкнулся с тем же вопросом, что и запрос, и сделал быстрый поиск, и ничто в Интернете не устранит его. Потребовалось время, чтобы найти проблему, глупую.
В IIS -> Предварительная настройка -> Учетные данные физического пути (пуст)
Как только я добавлю идентификатор машины (домена / пользователя), который имеет доступ к VM / серверу, запрос пароля остановится.
Надеюсь это поможет
У меня была эта проблема на .net core 2, и после прохождения большинства предложений отсюда кажется, что мы пропустили настройку на web.config
Правильная настройка была forwardWindowsAuthToken = “true”, которая кажется очевидной сейчас, но когда существует так много ситуаций для одной и той же проблемы, сложнее определить
Изменить: я также нашел полезной следующую статью Msdn, которая проходит через устранение неполадок.
У меня такая же проблема, и она была решена путем изменения идентификатора пула приложений пула приложений, под которым веб-приложение работает в NetworkService