Мы преобразовываем некоторые из наших веб-приложений, которые раньше работали с проверкой подлинности на основе форм, в настоящее время для запуска в качестве проверки подлинности 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) Это эффект интегрированного конвейера и почему он работает таким образом?