He estado intentando esto desde los últimos dos días. No entiendo cuál es el problema. Busqué en la web pero no encontré ninguna solución. Probé todas las configuraciones de IIS como "Mover negociar hacia abajo, deshabilitar otra autenticación", pero no funciona. Así que aquí está mi problema: tengo una aplicación web de intranet en ASP.NET que utiliza nombres de usuario y contraseñas almacenados en Active Directory. Tengo cinco páginas diferentes en mi solicitud. Todas las páginas se almacenan en carpetas separadas con sus archivos web.config. Estos archivos web.config tienen nombres de los usuarios que pueden ver esa página como esta.
<authorization>
<allow users="Domainname\username"/>
</authorization>
Quiero redirigir a los usuarios que no están en la lista anterior a otra página de error con el mensaje apropiado. Yo usé esto
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");
}
}
Esto funciona en el host local, pero cuando coloco mi aplicación en IIS, todos los usuarios autorizados (aquellos que están en la lista) también redirigen a la página del mensaje de error.
Fuera de IIS, funciona correctamente. Sin embargo, no puedo redirigir a usuarios no autorizados a la página de mensajes de error. También probé con la configuración de páginas de error de IIS, pero tengo el mismo problema.
Sugierame qué debo hacer para corregir esto. ¿Hay alguna otra manera de hacerlo?
Respuesta1
No sé con certeza si este es el problema en su caso específico, pero en general, el proceso es:
- El navegador intenta conectarseanónimoen la primera conexión
- El servidor web dice "lo siento, no puedes hacer eso, error 401, estas son las formas en que el usuario puede autenticarse"
- El navegador clasifica la autenticación (por ejemplo, solicitando credenciales al usuario)
- El navegador realiza una segunda solicitud, con información del encabezado de autenticación incluida
Supongo que estás fallando en el paso (1) al detectar el primer 401 antes de que el usuario tenga la oportunidad de proporcionar las credenciales. Puedes verificar esto con las herramientas F12 o con una herramienta como Fiddler.
Respuesta2
Si está utilizando la autenticación de Windows, debe tener esto en cuenta. Si está habilitando manualmente la autenticación de Windows en IIS, no incluya el siguiente código en su web.config.
<authentication mode="Windows" />
Si usa esto, causará el mismo problema que mencioné anteriormente en mi pregunta.