Перенаправление проверки подлинности Windows на пользовательскую страницу 401 - PullRequest
5 голосов
/ 30 января 2012

Мы преобразовываем некоторые из наших веб-приложений, которые раньше работали с проверкой подлинности на основе форм, в настоящее время для запуска в качестве проверки подлинности Windows.Я хочу воссоздать страницу безопасности, которая имеет аутентификацию формы с минимальным изменением реальных страниц.Мне удалось воссоздать эффект, который я хочу, с помощью упрощенного веб-приложения.Я запускаю приложение на интегрированном конвейере Server 2008 R2 IIS 7.5.

Я создал простое трехстраничное приложение с использованием проверки подлинности Windows.Три страницы:

  • Openpage.aspx, который открыт для любого аутентифицированного пользователя
  • Blockedpage.aspx, который заблокирован для всех пользователей (символ каталога или страницы, которая будетзаблокировано для подмножества пользователей в зависимости от роли пользователя)
  • ErrorPage.aspx, если доступ к заблокированному файлу (и отклонен) заблокирован, приложение должно переслать в ErrorPage.aspx, где пользователь получает общую информацию о приложении.

Web.Config для приложения:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      <authentication mode="Windows"/>
      <authorization>
        <deny users="?" />
        <allow users="*" />
      </authorization>
    </system.web>
  <location path="blockedpage.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <system.webServer>
   <httpErrors errorMode="Custom" >
      <remove statusCode="401" subStatusCode="-1" />
      <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" />
    </httpErrors>

    <validation validateIntegratedModeConfiguration="false" />
    <defaultDocument>
      <files>
        <clear />
        <add value="openpage.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

</configuration>

(Если я не пытаюсь перенаправить ошибки 401 на уровне asp.net, я просто получаю стандартное «сообщение не авторизовано », а это не тот эффект, который я хочу дать своим пользователям.)

Однако я получаю ошибку, которую не понимаю - каждый раз, когда сервер перезагружается, приложение перестает работать.IIS просто возвращает ошибки 401 до тех пор, пока в браузере не появится ручное управление входом в систему, что не может быть выполнено.(Я никогда не хочу, чтобы мои пользователи отображались с приглашением для входа в браузер)

Однако, если я заменил раздел httperrors после настройки приложения (либо путем редактирования веб-конфигурации, либо обновления его с помощьюGUI сервера) удалив раздел, получив доступ к странице, а затем добавив его обратно, приложение начинает работать должным образом и продолжает работать до тех пор, пока сервер не будет перезагружен, и в этот момент он снова начнет давать пользователям всплывающее окно входа в систему вручную,которые они не могут разрешить.

1) Это правильный способ защитить приложение с помощью аутентификации Windows (есть ли лучший способ настроить каталог, недоступный, как в формах, но при этом предоставить пользовательскую страницу ошибки?)

2) Это эффект интегрированного конвейера и почему он работает таким образом?

1 Ответ

1 голос
/ 13 марта 2012

Вы пытаетесь предоставить содержимое через сообщение об ошибке транспорта.

Формы позволяют вам делать это, потому что он состоит из элементов 7-го уровня, таких как 302 и 200.401-е интерпретируются браузером клиента как «серверу не нравятся мои учетные данные, поэтому откройте диалоговое окно, чтобы запросить новые».

Страница, прошедшая проверку подлинности, производит как минимум 1 401 для проверки подлинности;то, что вы перегружаете «ошибку» для чего-то другого, возможно, является причиной проблемы.

Я не уверен, что есть элегантный способ сделать то, что вы хотите.

...