Я устанавливаю веб-приложение на сервер IIS 7.5 (Win Server 2008 R2), и у меня возникают проблемы с аутентификацией Windows. Я делал эту установку десятки раз, но из-за этого я застрял, поэтому любые предложения приветствуются.
Резюме
Только администраторы могут подключаться к моему веб-сайту через проверку подлинности Windows, но я хочу, чтобы все пользователи прошли проверку подлинности. Администратор может подключиться как с машины через localhost, так и с другой рабочей станции. Другим пользователям предлагается ввести учетные данные вместо автоматической аутентификации, и им отказывают в доступе. И это несмотря на то, что всем предоставляется полный контроль над веб-каталогом.
Подробный сценарий:
Веб-приложение создано с использованием пула приложений, работающего как СЕТЕВАЯ СЛУЖБА. Проверка подлинности Windows включена, все остальные отключены. Аутентификация Windows имеет режим ядра = true (то есть IIS по умолчанию), а провайдеры заказывают NTLM, Negotiate (хотя я пробовал и наоборот). Все логины находятся в одном домене, и веб-сервер находится в этом домене.
Приложение установлено на C:\MyApplication\App\
После входа на сервер (в качестве учетной записи администратора) я могу перейти к http://localhost/MyApp
и аутентифицируюсь автоматически.
При входе на сервер (в качестве учетной записи администратора) я перехожу к http://webserver.full.domain.com/MyApp
и меня попросят ввести учетные данные. После трехкратного ввода получаю 401.1 Неавторизованная страница.
При входе на рабочую станцию с учетной записью обычного пользователя я перехожу к http://webserver/MyApp
Мне 3 раза предлагается ввести учетные данные, а затем отображается сообщение «Доступ запрещен».
При входе на рабочую станцию в качестве учетной записи администратора, которая работает на сервере, я также могу перейти к http://webserver/MyApp
и я автоматически аутентифицируюсь. Вход с другими учетными записями не работает. Мне это кажется особенно странным, предполагая, что речь идет только о разрешениях ... но с разрешениями все в порядке ?!
В журнале событий безопасности не регистрируется никаких сбоев, даже если подробное ведение журнала Kerberos включено в соответствии с Эта статья.
Похоже, что имена участников-служб настроены правильно, я использовал "setspn -L servername" с другого компьютера и увидел две записи HOST/servername
и HOST/servername.full.domain.com
.
На сервере есть еще одно приложение, которое работает как NETWORK SERVICE, использует анонимную аутентификацию в IIS, а затем использует встроенную безопасность SQL для подключения к SQL Server. Он не использует олицетворение, поэтому подключается к SQL Server в качестве идентификатора компьютера. DOMAIN\SERVER$
. Это прекрасно работает. Я упоминаю об этом, поскольку это говорит о том, что у машины нет фундаментальных проблем в домене, так как ее идентификатор принимается SQL Server.
Я предоставил NETWORK SERVICE Full Control для папки веб-сервера, где находится приложение (C:\MyApplication\
). Я дал авторизованным пользователям разрешение на чтение / список / выполнение. Internet Explorer с рабочих станций правильно определяет http://webserver/MyApp
как в зоне интрасети
В Internet Explorer включена проверка подлинности Windows.
Я также попытался создать еще один виртуальный каталог для C:\MyApplication\test
, с одним файлом test.html, также с включенной проверкой подлинности Windows и соответствующими разрешениями. Те же симптомы, но я получаю 401.2 Неавторизованный вместо 401.1.
На сервере изначально не была установлена роль IIS, поэтому я добавил ее. Я забыл выбрать «Проверка подлинности Windows» в первый раз, поэтому добавил эту службу ролей, когда дошел до того, что попытался включить проверку подлинности Windows для своего приложения.
Когда я изначально установил роль IIS и перешел к http://localhost
пул приложений по умолчанию остановлен, и мне было показано сообщение об ошибке сервера. Переключение пула приложений по умолчанию на запуск в качестве сетевой службы решило эту проблему. Теперь мне интересно, означало ли это, что на сервере были другие проблемы, которые могли вызывать мои проблемы с аутентификацией. например это исправление, хотя при работе в качестве СЕТЕВОЙ СЛУЖБЫ это не должно влиять на меня.
На всякий случай перезапустил сервер и повторно протестировал. Не повезло.
Создал тестовый файл c:\inetpub\wwwroot\testwwwroot\test.html
, установите проверку подлинности Windows только на веб-сайте и попытались получить к нему доступ с рабочей станции. Те же симптомы. Следовательно, это проблема, которая касается wwwroot, а также других папок.
Предоставил всем полный доступ к папке и повторно протестировал, все еще нет доступа.
Предоставил конечному пользователю полный доступ к папке и провел повторное тестирование, но доступа по-прежнему нет.
Из IE поместите сайт в Надежные сайты (вместо зоны интрасети) и повторно протестируйте, безуспешно. Удалено, так что это снова зона интрасети.
Изменены настройки IE для зоны интрасети на «Автоматический вход с именем пользователя и паролем», доступа по-прежнему нет.
Удалено согласование как вариант, поэтому он будет принудительно использовать только NTLM без доступа.
Протестировано с рабочей станции с использованием http://<ipaddress>/Myapp
вместо имени сервера. Запрашивается учетные данные (ожидается), но запрашивается 3 раза при вводе правильных данных, а затем нет доступа.
Пытался добавить сетевую службу в качестве члена группы IIS_IUSRS (нет особых причин, почему это могло бы помочь), но доступа все еще нет.
Изменил идентификатор пула приложений по умолчанию с NETWORK SERVICE обратно на ApplicationPoolIdentity. Переход к http://localhost
с сервера и получил ошибку сервера. В журнале событий были следующие сообщения:
ОШИБКА: пул приложений DefaultAppPool отключен. Служба активации Windows (WAS) обнаружила сбой при запуске рабочего процесса для обслуживания пула приложений.
ВНИМАНИЕ! Идентификатор пула приложений DefaultAppPool недействителен. Имя пользователя или пароль, указанные для удостоверения, могут быть неправильными, или у пользователя могут отсутствовать права на пакетный вход. Если идентификация не исправлена, пул приложений будет отключен, когда пул приложений получит свой первый запрос. Если права на пакетный вход вызывают проблему, необходимо изменить удостоверение в хранилище конфигурации IIS после предоставления прав, прежде чем служба активации процессов Windows (WAS) сможет повторить попытку входа. Если удостоверение остается недействительным после обработки первого запроса для пула приложений, пул приложений будет отключен. Поле данных содержит номер ошибки.
ПРЕДУПРЕЖДЕНИЕ. Пул приложений DefaultAppPool отключен. Служба активации Windows (WAS) не создала рабочий процесс для обслуживания пула приложений, поскольку удостоверение пула приложений недействительно.
Установка идентификатора обратно в NETWORK SERVICE решила указанную выше проблему. Но мне интересно, связано ли это с этим.
Я использовал инструменты разработчика F12, чтобы увидеть заголовки запроса / ответа: сервер отправлял WWW-Authenticate: Negotiate
и WWW-Authenticate: NTLM
при тестировании с рабочей станции. IE не отправлял ничего, связанного с WWW-аутентификацией в заголовках запроса. При выполнении того же теста из IE на сервере (где он правильно аутентифицируется) заголовок ответа был WWW-Authenticate: Negotiate <then a long securitytoken like oRswGaADCg....>
Я сравнил файл applicationHost.config с сервера с моим локальным и не заметил никаких явных проблем. Например, WindowsAuthenticationModule
указан, так что это не похоже Эта проблема.
Я очень зациклился на этом ...
Приветствуются любые предложения о том, что я должен попробовать или посмотреть, чтобы устранить неполадки.
(Также опубликовано на Форумы IIS здесь)
Я заметил похожую проблему после обновление сервера с .NET 4.5 до .NET 4.6.
После обновления .NET на сервере все мои сайты в IIS, которые работали, перестали работать с этой ошибкой 401.2 о несанкционированном доступе ... бла-бла.
«Что дает! - они работали 20 минут назад».
Посмотрев в IIS7, я заметил, что теперь была включена только «Анонимная аутентификация», а не формально отключена, а «Аутентификация Windows» была больше не включен. Отсюда проблема, поскольку мои сайты поддерживали только аутентификацию Windows.
Мораль истории = режимы аутентификации Double Check в IIS7
Вопрос для размышления: Как все режимы аутентификации в II7 были сброшены до значения по умолчанию "Анонимная аутентификация" включена? Это было связано с обновлением .NET 4.6?
Задача решена. Клиент создал учетную запись компьютера в неправильном организационном подразделении: он был в подразделении «Компьютеры» вместо серверов. Вероятно, это означало, что у него есть некоторые настройки GPO, которые блокируют доступ для учетных записей без прав администратора ... или что-то в этом роде.
Я попытаюсь получить результат gpresult.exe до и после исправления, чтобы точно определить, какая политика вызвала это.
Для всех, кто устраняет подобные проблемы, я рекомендую это сообщение в блоге. Это не решило проблему для меня, но относится к различным полезным вещам для изучения проблем с Kerberos.