Как использовать пользовательскую страницу ошибок при проверке подлинности Windows

Я использую asp.net 3.5 web.config для ограничения доступа, и он отлично работает.

<authentication mode="Windows">
<authorization>
    <allow users="Bill, John"/>
    <deny users="*"/>
</authorization>

Неавторизованные (но прошедшие проверку подлинности) пользователи будут заблокированы системным сообщением об ошибке, в котором говорится, что:

Server Error in '/' Application
Access is denied.
Description: An error occurred while .......
Error message 401.2: Unauthorized: Logon failed due to server configuration ...

Чтобы сделать сообщение более понятным, я раскомментировал флаг customErrors и создал GenericErrorPage.htm в корневом каталоге моего проекта.

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
    <error statusCode="403" redirect="NoAccess.htm" />
    <error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>

Однако это просто не работает. Я по-прежнему получаю сообщение об ошибке системы, а не свою пользовательскую страницу ошибки.

Любые предложения будут оценены.


person nonetaku    schedule 18.03.2011    source источник


Ответы (3)


Вы этого не увидите — настраиваемые страницы ошибок обслуживаются приложением ASP.NET, но аутентификация Windows обслуживается самим IIS.

Теперь вы можете настроить IIS на использование разных страниц ошибок. Для IIS7 требуется отдельный раздел конфигурации;

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto">
    <error statusCode="403" 
           subStatusCode="-1" 
           prefixLanguageFilePath="" 
           path="C:\inetpub\wwwroot\errors\403.htm" 
           responseMode="File" />
  </httpErrors>
</system.webServer>

И вам нужно будет убедиться, что пользователь пула приложений имеет доступ к этому пути.

person blowdart    schedule 28.07.2011

Не проверяя это в других сценариях, но просматривая некоторые предложения из этого подробная статья по похожей проблеме.

Другая проблема оказалась:

доступ к странице с ошибкой был заблокирован в соответствии с требованиями авторизации.

Решение заключалось в использовании атрибута в файле web.config. обратитесь к ссылке для более подробного объяснения, но вот фрагмент:

<!-- in the same root web config file-->
<configuration>
    <system.web>
        <authorization>
        <allow users="Bill, John"/>
        <deny users="?" />
        </authorization>
    </system.web>

    <!-- the page specific authorization-->   
    <location path="GenericErrorPage.htm"> <!-- other ones for your other pages-->
        <system.web>
        <authorization>
        <allow users="*" />
        </authorization>
        </system.web>
    </location>

</configuration>
person Nick Josevski    schedule 28.07.2011
comment
Это решение работает только при использовании проверки подлинности с помощью форм, а не проверки подлинности Windows. - person xpereta; 30.01.2013

изменять :

<customErrors mode="RemoteOnly" />

Атрибут режима может быть одним из следующих:

* On – error details are not shown to anybody, even local users. If you specified a custom error page it will be always used.
* Off – everyone will see error details, both local and remote users. If you specified a custom error page it will NOT be used.
* RemoteOnly – local users will see detailed error pages with a stack trace and compilation details, while remote users with be presented with a concise page notifying them that an error occurred. If a custom error page is available, it will be shown to the remote users only.

Отображать краткую, но не очень красивую страницу с ошибкой для посетителей по-прежнему недостаточно, поэтому вам нужно собрать пользовательскую страницу с ошибкой и указать ее следующим образом:

<customErrors
       mode="RemoteOnly" 
       defaultRedirect="~/errors/GeneralError.aspx" 
/>
person Pranay Rana    schedule 18.03.2011