Получение приглашения войти с помощью встроенной проверки подлинности Windows - PullRequest
101 голосов
/ 23 марта 2011

У меня есть приложение .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 снова отображается имя пользователя, которое попыталось войти в систему под именем «SERVERNAME» \ «USERNAME», что заставило меня поверить, что он пытался проверить пользователя на сервере против домена. Чтобы подтвердить это, я создал учетную запись локального пользователя непосредственно на сервере приложений с тем же именем пользователя и паролем, что и у пользователя сетевого домена, и попытался снова войти в систему. В результате я снова получил приглашение войти в систему, но когда на этот раз я ввел имя пользователя и пароль, я смог успешно войти в систему. Пользователь сети и сервер приложений находятся в одном домене, поэтому на самом деле не уверены, почему проверка подлинности IIS указывает на локальные учетные записи сервера приложений, а не на учетные записи домена. Я понимаю, что на данный момент это вопрос IIS, поэтому я также размещаю сообщения на forums.iis.net, но я ценю любые советы, которые кто-либо может получить с тех пор, как устранял это в течение нескольких дней.

Ответы [ 21 ]

84 голосов
/ 07 января 2015

У меня есть сервер Windows 2008, на котором я работаю, поэтому мой ответ не полностью совпадает с тем, который имеет OP на сервере Windows 2003.

Вот что я сделал (записав это здесьчтобы найти его позже).

У меня возникла такая же проблема:

login prompt

В моем файле Web.config яимел этот раздел:

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <allow users="*" />
        <deny users="?" />
    </authorization>
</system.web>

В IIS все это, кажется, решается с помощью значка Аутентификация .

  1. Редактировать разрешения: Убедитесь, что ваш ASPУчетная запись .NET имеет разрешение.Мой изначально не был добавлен.

ASP.NET permission

Теперь перейдем к функциям Аутентификация :

Authentication Features

Включить Анонимная аутентификация с помощью IUSR:

Anonymous Authentication

Включить Аутентификация Windows , затем щелкните правой кнопкой мыши, чтобы установить Провайдеры .

NTLM должен быть ПЕРВЫМ!

Windows Authentication

Далее проверьте это в ДополнительноНастройки ... Расширенная защита - Принять и Включить аутентификацию в режиме ядра ПРОВЕРЕНО:

Advanced Settings

После того, как я это сделал, я вернулся в свое веб-приложение, щелкнул ссылку «Обзор» и вошел в систему без необходимости повторного ввода учетных данных.

Надеюсь, это окажется полезным для многих из вас, иНадеюсь, это пригодится и мне позже.

39 голосов
/ 28 октября 2013

Просто для блага других людей. Если ошибка 401.1 Unauthorized и ваш код ошибки совпадает с 0xc000006d, то вы фактически сталкиваетесь с «функцией» безопасности, которая блокирует запросы к полному доменному имени или пользовательским заголовкам хоста, которые не соответствуют имени вашего локального компьютера:

Следуйте этой статье поддержки, чтобы решить эту проблему:

http://support.microsoft.com/kb/896861

Это заняло у меня некоторое время, потому что комментарии других здесь не помогли мне. Я нашел эту статью, и она исправила это!

26 голосов
/ 11 апреля 2011

У меня была похожая проблема, из-за которой я хотел защитить только определенную часть моего сайта.Все работало хорошо, кроме как в IE.У меня включена анонимная аутентификация и аутентификация Windows.Для Anonymous Identity устанавливается на идентичность Application Pool.Проблема была с Аутентификацией Windows.После нескольких копаний я запустил Fiddler и обнаружил, что он использует Kerberos в качестве провайдера (на самом деле он установлен на Negotiate по умолчанию).Я переключил это на NTLM, и это исправило это.HTH

Дауди

14 голосов
/ 30 ноября 2012

Добавить разрешение [Domain Users] для вашей веб-безопасности.

  • Щелкните правой кнопкой мыши свой сайт в IIS в папке Sites
  • Нажмите Изменить разрешения ...
  • Выберите вкладку «Безопасность»
  • В разделе «Группа или имена пользователей» нажмите кнопку «Изменить ...»
  • Во всплывающем окне «Разрешения» в разделе «Имена групп или пользователей» нажмите кнопку Добавить ...
  • Введите [Domain Users] в именах объектов, чтобы выбрать текстовую область, и нажмите OK, чтобы применить изменение
  • Нажмите OK, чтобы закрыть всплывающее окно Разрешения
  • Нажмите OK, чтобы закрыть Свойствавсплывающее окно и применить новые настройки
12 голосов
/ 04 июля 2013

Не создавайте ошибок на своем сервере, меняя все. Если у вас есть приглашение Windows для входа в систему при использовании аутентификации Windows на 2008 R2, просто перейдите на Providers и переместите UP NTLM для каждого приложения. Когда Negotiate является первым в списке, проверка подлинности Windows может перестать работать свойство для определенного приложения в 2008 R2, и вам может быть предложено ввести имя пользователя и пароль, которые никогда не будут работать. Это иногда случается, когда вы обновляете приложение. Просто убедитесь, что NTLM стоит первым в списке, и вы больше никогда не увидите эту проблему.

6 голосов
/ 05 октября 2016

Если ваш URL содержит точки в имени домена, IE будет воспринимать его как интернет-адрес, а не как локальный.У вас есть как минимум два варианта:

  1. Получить псевдоним для использования в URL-адресе для замены server.domain.Например, myapp.
  2. Выполните следующие действия на вашем компьютере.

Перейдите на сайт и отмените диалог входа в систему.Пусть это произойдет:

enter image description here

В настройках IE:

enter image description here

enter image description here

enter image description here

5 голосов
/ 21 октября 2012

Это исправило это для меня.

Мой сервер и клиентский ПК являются Windows 7 и находятся в одном домене

  1. в iis7.5 - включить проверку подлинности Windows для вашей интрасети (отключить все другие проверки подлинности. Также не нужно упоминать проверку подлинности Windows в файле web.config

  2. , затем перейдите на клиентский ПК. IE8 или 9 - Сервис-Свойства обозревателя-Безопасность-Локальная интрасеть-Сайты-Дополнительно-Добавьте свой сайт (снимите отметку «Требуется проверка сервера ...» .. нет необходимости

  3. IE8 или 9- Сервис-Свойства обозревателя-Безопасность-Локальная интрасеть-Пользовательский уровень-userauthentication-logon-select Автоматический вход с текущим именем пользователя и паролем

  4. сохраните эти настройки .. все готово .. Больше не нужно запрашивать имя пользователя и пароль.

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

4 голосов
/ 28 ноября 2011

WindowsIdentity.GetCurrent правильно: вы должны получить пользователя APPPOOL. Это связано с тем, что процесс ASP.NET, выполняющий ваш код, является текущей идентификацией. Если вы хотите, чтобы он возвращал пользователя, регистрирующего личность сайта, вам нужно добавить следующую строку в ваш файл web.config:

<identity impersonate="true" />

Это заставляет процесс принять личность пользователя, запрашивающего страницу. Все действия будут выполняться от их имени, поэтому любые попытки чтения папок в сети или доступа к ресурсам базы данных и т. П. Будут означать, что текущему пользователю потребуются разрешения на эти вещи. Вы можете прочитать больше об олицетворении здесь . Обратите внимание, что в зависимости от того, как настроена топология вашего веб-сервера / сервера базы данных, вы можете столкнуться с проблемами делегирования с включенным олицетворением.

Но ваша первоначальная проблема заключается в том, что кажется, что личность не может быть определена, и вы получаете всплывающее окно входа в систему. Отмечу, что вам не нужен блок <deny>, если вы отключили анонимную аутентификацию в IIS. Мы никогда не включаем его (за исключением специальных <location> блоков и т. Д.), Поэтому я бы сказал, что вы можете попробовать удалить его и повторить попытку. Все остальное звучит правильно, хотя.

Вы не указали, какой пользователь запускает пул приложений в IIS. Это пользовательская учетная запись или это учетная запись по умолчанию? Если это пользовательский, это учетная запись домена или локальная учетная запись на веб-сервере? Для пользовательских учетных записей иногда может потребоваться еще несколько шагов, например регистрация имени участника-службы. Кроме того, это может быть проблема с пользовательской учетной записью, не имеющей разрешения в AD для разрешения учетной записи входящего пользователя.

Вы также можете проверить журналы IIS, чтобы увидеть, какой ответ возвращается. Скорее всего, это будет 401, но после него должен быть дополнительный номер, например 401.2 или что-то в этом роде. Этот дополнительный номер может иногда помочь определить корневую проблему. В этой статье KB перечислены пять.

4 голосов
/ 23 марта 2011

Может быть связано с браузером. Если вы используете IE, вы можете перейти в Дополнительные настройки и установить флажок «Включить встроенную проверку подлинности Windows».

3 голосов
/ 29 июля 2015

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

IE Internet Options

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...