Я наблюдаю странное поведение коробки Server 2008 R2, на котором запущены .net 4 и IIS 7.5 в интегрированном пуле приложений.
Корневой файл web.config довольно ясно показывает, что я хочу использовать проверку подлинности Windows.
<authentication mode="Windows"/>
никаких сюрпризов нет.
У меня есть каталог, который я хотел бы защитить, поэтому я добавил в этот каталог следующий файл web.config:
<configuration>
<system.web>
<authorization>
<allow users="MYDOMAIN\MYUSER" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Проверка подлинности Windows включена в IIS и указывается в корневом файле web.config, поэтому я ожидал, что появится обычное диалоговое окно «Запрос / ответ» и попросит ввести пароль. Вместо этого меня перенаправили на несуществующий URL http://mysite.com/Account/Login?ReturnUrl=%2ftestdir
Кажется, это каталог входа по умолчанию для проверки подлинности с помощью форм, который я не использую, поэтому запрос возвращает ошибку 404.
ACL в базовых каталогах позволяют предполагаемому пользователю получить доступ к файлу.
Кто-нибудь видел, как IIS ведет себя подобным образом?
Для справки в будущем это похоже на недоразумение между режимами аутентификации.
IIS 7+ имеет два режима - один с использованием встроенного набора параметров проверки подлинности уровня HTTP - в <system.webServer>
и один для ASP.Net в <system.web>
.
Поведение ASP.Net не становится доступным до тех пор, пока вы не запустите обработчик ASP.Net - в классическом или интегрированном режиме - а затем все еще (обычно) применяются после уровня IIS system.webServer/security
настройки.
В приведенном выше примере добавление страницы ASP.Net изменило поведение (по крайней мере) этой страницы, и я бы угадать возможно, добавлены сопоставления обработчиков подстановочных знаков для обработки URL без расширений через .Net.
Также существует авторизация URL-адреса (IIS, т.е. system.webServer
) против авторизации .Net (.Net, т.е. system.web
) правила, которые следует учитывать - как правило, выберите один набор для каждого приложения и придерживайтесь его.
Думаю, я нашел ответ на этот вопрос, но он действительно странный. Я разместил на сайте простую страницу .chstml. Хотя это была всего лишь тестовая страница, похоже, что она каким-то образом наложила на IIS злое заклятие.
Синтаксис Razor действительно хорош, но кажется опасным смешивать его со стандартным сайтом веб-форм.