Я разработал несколько внутренних сайтов для своей организации, которые используют встроенную аутентификацию. В конечном итоге мы хотим, чтобы эти сайты были доступны извне для пользователей компьютеров, присоединенных к домену. Сайты работают должным образом на компьютерах домена во внутренней сети. Проблема возникает, когда я беру свой ноутбук домой и пытаюсь получить доступ к этим сайтам.
В IIS включена только встроенная проверка подлинности для двух сайтов. Когда я перехожу на сайт с помощью IE8, я получаю запрос на ввод имени пользователя и пароля с запросом учетных данных домена. Я могу вставить их, и он будет работать, но цель состоит в том, чтобы использовать кешированный токен для интегрированной аутентификации.
Затем я рассудил, что IE не будет отвечать на интегрированный запрос аутентификации (подходит ли NTLM для этого?), Если сайту не доверяют. Я попытался добавить сайт в список надежных сайтов, но у меня такое же поведение, как и раньше. Затем я добавил этот сайт на сайты местной интрасети, и тут все стало странно. Я получаю общую страницу ошибки из IE, без кода ошибки или чего-то еще.
Просто для забавы я загрузил Firefox (который я ранее настроил для использования встроенной аутентификации) и добавил этот новый сайт в network.automatic-NTLM-auth.trusted-uris. К моему большому удивлению, я смог загрузить страницы без каких-либо проблем и увидел именно то, что я ожидал (включая проверку работы встроенной аутентификации).
В данный момент я немного сбит с толку, потому что не совсем уверен, что делать дальше. Я надеялся, что некоторые из вас смогут что-то поделать.
Обновление 11.05.10 Я начал возиться с Fiddler, как рекомендовано ниже, и увидел некоторые расхождения между тем, как Firefox и IE обрабатывают запрос страницы. Когда я тестировал Internet Explorer, он делает один запрос, выдает ошибку 401.2 (ошибка конфигурации сервера) и умирает. Когда это происходит, в журнале безопасности нет записей. Firefox сначала обнаруживает ту же ошибку, но впоследствии отправляет другой запрос, и аутентификация проходит успешно.
Имея в виду, что первоначальное тестирование проводилось за пределами сети, я посмотрел на успешную аутентификацию IE8, выполненную внутри, и, похоже, он ведет себя так же, как Firefox, как внутри, так и снаружи. Первоначальный запрос удовлетворяется с помощью 401.2, затем отправляется другой, и ему соответствует 401.1 (проблема?), За которым следует 200 (успех).
Таким образом, проблема, похоже, в том, что при доступе к сайту "интрасети" из-за пределов сети IE8 получает ошибку 401.2, а затем умирает, когда должен (по меркам других браузеров) продолжить процесс аутентификации.
Может ли кто-нибудь проверить описанную мною активность Fiddler?
Мне кажется, что вы стали жертвой "ошибки" в IE8, как это было сообщил в Microsoft здесь и подробнее обсуждается здесь.
Я подозреваю, что если вы воспользуетесь AdsUtil.vbs
сценарий, чтобы установить аутентификацию в затронутом каталоге на «NTLM» вместо стандартного «Negotiate, NTLM», и проблема, вероятно, исчезнет.
Вы можете проверить, наблюдаете ли вы такое поведение, наблюдая за клиентским компьютером с помощью Wireshark (или вашего любимого сниффера) и наблюдая, пытается ли он выполнить разрешение широковещательного имени NetBIOS для контроллера домена при попытке доступа к сайту.
Некоторые сведения о значении NTAuthenticationProviders, о котором я говорю, доступны от Microsoft KB215383. Для IIS6, если значение не определено, IIS рассматривает его как «Согласование, NTLM». Я предполагаю, что вы работаете с настройками по умолчанию.
Вы можете проверить это значение, используя adsutil.vbs
скрипт (который по умолчанию устанавливается в% SystemDrive% \ Inetpub \ AdminScripts). Используйте следующую команду, чтобы проверить значение для первого веб-сайта на машине (очевидно, измените путь в этом примере, чтобы он соответствовал вашему реальному приложению):
cscript adsutil.vbs GET W3SVC/1/Root/NTAuthenticationProviders
Помните - если значение не определено, то IIS6 будет использовать встроенную настройку по умолчанию «Negotiate, NTLM».
Чтобы изменить значение NTAuthenticationProviders для корневого каталога первого веб-сайта на компьютере, используйте следующую команду:
cscript adsutil.vbs SET W3SVC/1/Root/NTAuthenticationProviders "NTLM"
Microsoft рекомендует проверить значение «взято», запросив его еще раз после того, как вы его установили.
У вас есть доступ к журналу безопасности сервера IIS? Если да, это поможет вам понять, почему встроенная аутентификация не работает в IE8. Если у вас нет доступа к журналам, вы можете получить представление о трафике на стороне клиента с помощью WebFiddler, что позволит вам сравнить трафик аутентификации HTTP между IE8 и FireFox.