Принудительное использование пользовательской неавторизованной страницы HTTP 401 в ASP.NET

Я написал веб-приложение для внутреннего использования на работе (не для более широкого Интернета), которое использует аутентификацию Windows — ASP.NET опрашивает Windows для текущего набора учетных данных. Метод аутентификации, вызываемый из Page_PreInit защищенных страниц, выдает ошибку 401, если имя пользователя не найдено в группе AD, которую я настроил.

Я реализовал CustomErrorsFixer Earlz из Выброс HttpException всегда отправляет обратно HTTP 500 ошибка? так как я тоже возвращал только 500 секунд. Теперь мои пользовательские страницы ошибок работают, и это здорово.

При локальной разработке на сервере разработки Visual Studio я обнаружил, что если у меня нет доступа, я просто перехожу прямо на страницу с ошибкой 401. Тем не мение! Когда я публикую сайт на сервере IIS, если у пользователя нет доступа, он получает запрос имени пользователя/пароля Windows (уродливый, маленький в XP). На самом деле это очень удобно, потому что дает людям, которые вошли в другой домен, возможность ввести правильные учетные данные.

На этом этапе, когда появляется запрос пароля, если пользователь нажимает Отмена или Escape, он переходит на пользовательскую страницу 401, которая сообщает ему, как запросить доступ. . Однако, ЕСЛИ они попытаются ввести имя пользователя и пароль, которые по умолчанию относятся к неправильному домену и, следовательно, являются неправильными учетными данными, им будет показана страница IIS 401 по умолчанию, чего я очень хочу избежать. Третий сценарий — если они вводят ПРАВИЛЬНЫЕ учетные данные, их спрашивают 3 раза, а затем показывают пользовательскую страницу ошибки.

Таким образом, пользователи видят пользовательскую страницу 401, если они «аутентифицированы», и стандартную страницу IIS, если они не прошли проверку подлинности.

Однако я обнаружил, что большинство людей при появлении запроса с полем имени пользователя/пароля просто вводят имя пользователя/пароль без домена, что в конечном итоге оказывается неверным и, следовательно, отправкой их на непользовательскую страницу IIS 401. Кто-нибудь знает, как я могу это решить? Это очень раздражает, потому что людям нужно видеть пользовательскую страницу 401, чтобы увидеть, к какой группе им нужно запросить доступ!

Если это имеет значение, мы все используем браузер IE8 для XP или IE9 для Windows 7. Пожалуйста, дайте мне знать, если я должен опубликовать какой-либо код.


person Chris B    schedule 25.05.2012    source источник


Ответы (1)


IIS7 по умолчанию перехватывает 401 вместе с несколькими другими кодами состояния HTTP.

Попробуй это:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>
person FAtBalloon    schedule 25.05.2012
comment
Большое спасибо за ваше предложение. Я пробовал это и Response.TrySkipIisCustomErrors, но, боюсь, ни один из них не исправил это для меня. У меня нет прав на внесение изменений в IIS на уровне сервера. Что еще я могу попробовать? - person Chris B; 27.05.2012
comment
Извините, это единственная настройка, о которой я знаю лично. Обычно дело в этом. - person FAtBalloon; 29.05.2012