Я пытаюсь сделать это последние два дня. Я не понимаю, в чем проблема. Я искал в Интернете, но не нашел решения. Я перепробовал все настройки IIS, такие как «Переместить переговоры вниз, отключить другую аутентификацию», но это не работает. ИТАК, вот моя проблема: у меня есть веб-приложение интрасети в ASP.NET, которое использует имя пользователя и пароль, хранящиеся в Active Directory. У меня есть пять разных страниц в моем приложении. Все страницы хранятся в отдельных папках со своими файлами web.config. Эти файлы web.config содержат имена пользователей, которым разрешено просматривать эту страницу, например так.
<authorization>
<allow users="Domainname\username"/>
</authorization>
Я хочу перенаправить тех пользователей, которых нет в списке выше, на другую страницу с ошибкой с соответствующим сообщением. Я использовал это
protected void Application_EndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Response.Status.StartsWith("401"))
{
HttpContext.Current.Response.ClearContent();
Response.Redirect("~/myerrorpage.aspx?myerrormsg=you are not allowed");
}
}
Это работает на локальном хосте, но когда я помещаю свое приложение в IIS, все авторизованные пользователи (те, кто есть в списке) также перенаправляются на страницу с сообщением об ошибке.
За пределами IIS он работает правильно. Однако я не могу перенаправить неавторизованных пользователей на страницу сообщения об ошибке. Я также пробовал с настройками страниц ошибок IIS, но у меня та же проблема.
Пожалуйста, подскажите, что мне сделать, чтобы это исправить. Есть ли другой способ?
решение1
Я не знаю наверняка, является ли это проблемой в вашем конкретном случае, но в целом процесс таков:
- Браузер пытается подключитьсяанонимныйпри первом подключении
- Веб-сервер говорит: «Извините, вы не можете этого сделать, ошибка 401, вот способы аутентификации пользователя»
- Браузер выполняет аутентификацию (например, запрашивая у пользователя учетные данные)
- Браузер делает второй запрос, включая информацию заголовка аутентификации
Я предполагаю, что вы терпите неудачу на этапе (1), перехватывая первую ошибку 401 до того, как пользователь успеет предоставить учетные данные. Вы можете проверить это с помощью инструментов F12 или с помощью инструмента вроде Fiddler.
решение2
Если вы используете аутентификацию Windows, то вам следует помнить об этом. Если вы вручную включаете аутентификацию Windows в IIS, пожалуйста, не включайте приведенный ниже код в ваш web.config.
<authentication mode="Windows" />
если вы это используете, это вызовет ту же проблему, о которой я упомянул выше в своем вопросе.