Как использовать пользовательскую страницу ошибок в аутентификации Windows - PullRequest
4 голосов
/ 18 марта 2011

Я использую 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>

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

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

Ответы [ 3 ]

10 голосов
/ 28 июля 2011

Вы этого не увидите - пользовательские страницы ошибок обслуживаются приложением 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>

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

4 голосов
/ 28 июля 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>
0 голосов
/ 18 марта 2011

изменение:

<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" 
/>
...