
Если говорить кратко, мой вопрос заключается в том, должно ли приложение ASP.NET 4.0, работающее в интегрированном режиме IIS 7, иметь возможность учитывать эту часть моего файла Web.config:
<location path="auth/windows">
<system.webServer>
<modules>
<remove name="FormsAuthentication"/>
</modules>
</system.webServer>
</location>
Я экспериментирую со смешанным режимом аутентификации (Windows и Forms). Используя IIS Manager, я отключил анонимную аутентификацию для auth/windows/winauth.aspx, который находится в указанном выше пути расположения. Я настроил трассировку неудачных запросов для отслеживания различных кодов состояния HTTP, включая 302.
Когда я запрашиваю страницу winauth.aspx, возвращается код статуса HTTP 302. Если я посмотрю на трассировку запроса, то увижу, что 401 (неавторизованный) был изначально сгенерирован AnonymousAuthenticationModule. Однако FormsAuthenticationModule преобразует его в 302, который видит браузер. Так что, похоже, моя попытка удалить этот модуль из конвейера для страниц по этому пути не работает. Но я не вижу никаких жалоб нигде (в средстве просмотра событий, в справочнике «Желтые страницы смерти» и т. д.), которые бы указывали на недопустимую конфигурацию. Я хочу, чтобы браузеру возвращался код 401, который, предположительно, будет включать соответствующий заголовок WWW-Authenticate.
Еще несколько моментов: а) у меня в Web.config есть <authentication mode="Forms">
, и именно туда перенаправляет 302; б) я получил «имя» модуля, который пытаюсь удалить, из файла inetserv\config\applicationHost.config; в) у меня в файле Web.config есть этот элемент: <modules runAllManagedModulesForAllRequests="false">
; г) я попробовал <location>
элемент для пути, в котором я установил режим аутентификации на «None», но это дало желтую страницу исключения, что свойство не может быть установлено ниже уровня приложения.
Удалось ли кому-нибудь удалить модули таким способом?