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 для другого? мой контроллер доступа также запрашивает авторизацию (хотя атрибута авторизации нет)

0 ответов

Другие вопросы по тегам