MVC5 IIS7 использует контроллер / представление как ошибка 401
В течение нескольких дней я пытался заставить мое приложение MVC5 (развернутое на windows 2008r2 с iis7) вернуть контроллер для 401. Я хочу иметь возможность использовать этот пользовательский контроллер для получения с сервера информации о контактных данных, чтобы получить пользователя и доступ к приложению. этот активный каталог сервера не совпадает с пользователями, но у них есть доступ к этому серверу для веб-приложения.
ПРИМЕЧАНИЕ: тестирование на VS2013, встроенном в IIS (можно также протестировать на сервере 2008r2)
Мое приложение имеет контроллер Home и контроллер AccessDenied:
Домашний контроллер имеет пользовательский [Authorize], так как я реализовал свой второй уровень аутентификации поверх windows auth.
my [CustomAuthorize] проверяет, является ли пользователь действительным, и если true, то
проверяет мою базу данных (используется в качестве белого списка для определенных пользователей)
и возвращает false, если пользователь не находится в белом списке или он не является действительным в активном каталоге.пользователь входит в систему, используя встроенное всплывающее окно для ввода учетных данных (Chrome)
Если они введены правильно, но их нет в белом списке, они перенаправляются на контроллер AccessDenied
Однако, если пользователь нажимает кнопку "Отмена" или постоянно вводит недействительные учетные данные, сервер отвечает встроенной ошибкой IIS 401.1, 401.2 или 401
Мои начальные system.web и system.webserver:
<system.web>
<customErrors mode="On" >
<error statusCode="401" redirect="\AccessDenied" />
</customErrors>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<authentication mode="Windows" />
<authorization>
<!-- <deny users="?" />-->
</authorization>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthenticationModule" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
Результат:
- Пользователь действителен (не в белом списке): контроллер доступа запрещен
- Пользователь действителен (находится в белом списке): Home Controller
- Пользователь отменил / неверные учетные данные: 401.2
я пытался
- Тег HttpError
- [AnonymousAuthorize]
- специфично для анонимной аутентификации (все еще запрашивает логин)
Дополнительный вопрос: возможно ли разрешить анонимную аутентификацию для одного контроллера, но использовать аутентификацию Windows для другого? мой контроллер доступа также запрашивает авторизацию (хотя атрибута авторизации нет)