Solucionar problemas de autenticación de formularios

Columna de voz de soporte ASP .NET

Solución de problemas de autenticación de formularios

Para personalizar esta columna a sus necesidades, deseamos invitar a enviar sus ideas sobre temas que le interesan los problemas que desea ver y abordaron en próximas columnas de voz de soporte y artículos de Knowledge Base. Puede enviar sus ideas y comentarios mediante el Preguntar para el formulario. También hay un vínculo al formulario en la parte inferior de esta columna.
Bienvenido a la columna de voz de soporte de ASP.NET. Mi nombre es Jerry Orman. He sido con Microsoft durante 5 años y ha pasado la mayor parte de mi tiempo centrada en tecnologías relacionadas con el Web como Microsoft FrontPage y las nuevas tecnologías de Microsoft SharePoint. He pasado el último año que trabaja con Microsoft ASP.NET como ingeniero de soporte técnico. Este mes en la columna de voz de soporte, voy a explicar cómo solucionar problemas de autenticación de formularios en Microsoft ASP.NET.

Solución de problemas de autenticación de formularios

Al utilizar la autenticación de formularios en una aplicación ASP.NET, le resultará necesario solucionar un problema que se produce cuando el usuario aleatoriamente se redirige a la página de inicio de sesión. En un mundo ideal, este problema ocurriría de manera que le permita adjuntar a un depurador y capturar el problema fácilmente. En entornos de producción, sin embargo, esto ocurre rara vez. Para solucionar un problema aleatorio como éste, es necesario registrar información relacionada con el problema para que pueda acotar la causa raíz.

En este artículo, explicaremos brevemente el concepto de autenticación mediante formularios. A continuación, comentaremos en qué situaciones conducen a un usuario se redirige a la página de inicio de sesión y cómo capturar datos que son pertinentes para aislar el problema. También trataremos cómo implementar una interfaz de IHttpModule para registrar la información de autenticación de formularios.

Información general sobre la autenticación de formularios

Cuando un usuario se autentica mediante la autenticación de formularios en un sitio Web, el servidor crea una cookie. El valor de la cookie es un vale de autenticación de formularios cifrado. La cookie se pasa al servidor en cada solicitud a la aplicación, y la clase FormsAuthenticationModule descifra el valor de la cookie y determina si el usuario es válido o no.

De forma predeterminada, la clase FormsAuthenticationModule se agrega en el archivo Machine.config. La clase FormsAuthenticationModule administra el proceso de FormsAuthentication.

La siguiente es una entrada del archivo Machine.config:
<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

El tráfico HTTP general para autenticar mediante la autenticación de formularios es similar al siguiente:
  1. El cliente envía un HTTP GET a Default.aspx. No se ha enviado ninguna cookie de autenticación de formularios.
  2. El servidor envía una respuesta 302 (redirección) a Login.aspx.
  3. El cliente envía un HTTP POST a Login.aspx. Incluye la información de inicio de sesión.
  4. El servidor envía una respuesta 302 (redirección) a Default.aspx. Se incluye la cookie de autenticación de formularios.
  5. El cliente envía un HTTP GET a Default.aspx. Esto incluye la cookie de autenticación de formularios.
Para obtener más información acerca de cómo implementar y utilizar la autenticación de formularios, visite los siguientes sitios Web de MSDN:Para obtener más información acerca de cómo compartir las cookies de autenticación de formularios, visite el siguiente sitio Web de ASP.NET:

Razones de que un usuario puede redirigirse a la página de inicio de sesión

Se pierde la cookie de autenticación de formularios.

Escenario 1

En este escenario, un usuario inicia sesión en el sitio Web. En algún momento, el cliente envía una solicitud al servidor y la
Clase FormsAuthenticationModule no recibe la cookie. Puede determinar si una solicitud de usuario no contiene la cookie habilitando la cookie de sesión en servicios de Microsoft Internet Information Services (IIS). Para hacerlo, siga estos pasos:
  1. Abra Microsoft Management Console (MMC) de IIS.
  2. (Ratón) en el sitio Web y, a continuación, haga clic en
    Propiedades.
  3. Haga clic en la ficha sitio Web y, a continuación, haga clic en Habilitar registro.
  4. Asegúrese de que el formato de registro es el Formato de archivo de registro extendido W3C.
  5. Haga clic en Propiedades.
  6. Haga clic en la ficha Opciones avanzadas y, a continuación, haga clic en
    Propiedades extendidas.
  7. Bajo Propiedades extendidas, haga clic para activar la casilla de verificación Cookie(cs(Cookie)) y el Referer (cs(Referer)) casilla de verificación.
Después de producirse este problema, determine qué cliente tenía el problema y la dirección IP de ese cliente. Filtrar el registro IIS en la dirección IP de ese cliente y ver la columna <cookies>.

Nota: Puede utilizar Log Parser para analizar los registros de IIS. Para descargar Log Parser, visite el siguiente sitio Web de Microsoft:Una vez que obtenga la lista de solicitudes de ese usuario concreto, busque las solicitudes en la página de inicio de sesión. Sabrá se ha redirigido a esta página y desea ver las solicitudes antes de producirse la redirección. Si ve algo similar a la siguiente, el cliente bien no envió la cookie o la cookie se quitó de la red entre el cliente y el servidor.

Esto es el inicio de sesión.
MétodoPáginaRespuestaCookies
Obtener/Default.aspx302 (redirección)No hay Cookies
Obtener/Login.aspx200 (correcto)No hay Cookies
Exponer/Login.aspx302 (redirección)No hay Cookies
Obtener/Default.aspx200 (correcto).ASPXAUTH
Obtener/SomePage.aspx302 (redirección)No. Cookie ASPXAUTH
Estas son otras solicitudes, seguidos de una solicitud a una página en el sitio sin el. Cookie ASPXAUTH.
MétodoPáginaRespuestaCookies
Obtener/SomePage.aspx302 (redirección)No. Cookie ASPXAUTH
Obtener/Login.aspx200 (correcto)No. Cookie ASPXAUTH
Exponer/Login.aspx302 (redirección)No. Cookie ASPXAUTH
Obtener/SomePage.aspx200 (correcto).ASPXAUTH

Nota: La primera solicitud de usuario no es probable que tenga una cookie de autenticación de formularios a menos que se va a crear una cookie persistente. El registro de IIS sólo mostrará las cookies que se recibieron en la solicitud. La primera solicitud para que la cookie de autenticación de formularios estará en la solicitud después de un intento de inicio de sesión correcto.
Escenario 2

La cookie de autenticación de formularios también puede perderse cuando se supera el límite de cookies del cliente. En Microsoft Internet Explorer, hay un límite de 20 cookies. Después de crea la cookie de 20 en el cliente, cookies anterior se quitan de la colección del cliente. Si el. Se elimina la cookie ASPXAUTH, el usuario será redirigido a la página de inicio de sesión cuando se procesa la solicitud siguiente.

Puede solucionar estos dos escenarios de la misma manera. Mire la solicitud justo antes de la redirección a la página de inicio de sesión. Si la solicitud a esta página genera las cookies, esto será algo para investigar.

Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

306070 número y límites de tamaño de una cookie en Internet Explorer


Puede utilizar Fiddler para ver los encabezados HTTP que se envían al cliente. Después de capturar el tráfico, haga doble clic en una solicitud y, a continuación, haga clic en los encabezados para ver el encabezado Set-Cookie. Si realiza un seguimiento iniciar sesión correctamente, verá el encabezado Set-Cookie en la respuesta de inicio de sesión correcto.

Para descargar Fiddler, visite el siguiente sitio Web de Fiddler:
Escenario 3

Después de que la solicitud abandona al cliente, hay varias capas que pueden afectar a los paquetes que se envían. Para determinar si un dispositivo de red está quitando la cookie, se debe capturar una traza de red en el cliente y el servidor y, a continuación, buscar en el cuerpo de la solicitud de la cookie. Desea mirar la solicitud del cliente para asegurarse de que se envió la cookie y comprobar el seguimiento del servidor para asegurarse de que el servidor ha recibido la cookie.

Solicitud del cliente

Se trata de una solicitud GET después de que el usuario ha sido autenticado. La información del vale de autenticación de formularios está resaltada en azul. Esto confirma que la información de la cookie deja el cliente. Cuando se utiliza una herramienta de captura de red, como Netmon, verá el tráfico que llegó a través del adaptador.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61 gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63 spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53 che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30 PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36 C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46 9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35 51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46 81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34 24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39 B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46 9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43 BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46 2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65 4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62 =VisitorId=b24eb

Solicitud del servidor

Al mirar la solicitud que llegó al servidor, desea asegurarse de que el servidor ha recibido la misma información que se envía al cliente. Si el servidor no ha recibido la misma información, debe investigar otros dispositivos en la red para determinar dónde se ha quitado la cookie.

Nota: También se han realizado instancias de filtros ISAPI eliminar cookies. Si se confirma que el servidor Web recibe la cookie, pero la cookie no aparece en los registros de IIS, compruebe los filtros ISAPI. Tendrá que quitar los filtros para ver si se resuelve el problema.

El tiempo de espera de vale de autenticación de formularios

La otra causa común para redirigir un usuario es si el vale de autenticación de formularios ha caducado. El vale de autenticación de formularios puede tiempo de espera de dos maneras. El primer escenario se produce si se utiliza un vencimiento absoluto. Con un vencimiento absoluto, el vale de autenticación caduca cuando caduca el tiempo de caducidad. Por ejemplo, se establece una caducidad de 20 minutos, y un usuario visita el sitio a las 2:00 P.M.. El usuario será redirigido a la página de inicio de sesión si el usuario visita el sitio después de las 2:20 PM.

Si utiliza fechas de vencimiento, el escenario es un poco más complicado. La cookie y el vale resultante se actualizan si el usuario visita el sitio después de la fecha de caducidad está caducado a la mitad. Por ejemplo, establecer una caducidad de 20 minutos utilizando la expiración. Un usuario visita el sitio a las 2:00 P.M., y el usuario recibe una cookie que expirará a las 2:20 PM. La expiración sólo se actualiza si el usuario visita el sitio después de las 2:10 PM. Si el usuario visita el sitio a las 2:09 P.M., el vale no se actualiza porque no ha transcurrido la mitad del tiempo de caducidad. Si el usuario espera 12 minutos, el sitio a las 2:21 P.M., caducará el vale. El usuario se redirige a la página de inicio de sesión.

Es una forma de enfoque de este tipo de problema registrar la información de cookie y el vale de autenticación de formularios. De este modo, puede ver si la cookie se recibió por IIS y cuáles son los valores. Para ello, puede escribir un HttpModuley, a continuación, conectar ese módulo en la canalización de solicitudes. No necesitará modificar el código de la aplicación para obtener la información que necesita.

En el ejemplo adjunto trabaja en el Microsoft.NET Framework 1.1 y 2.0 de.NET Framework y tiene comentarios a lo largo. El ejemplo incluye los siguientes archivos:Nota proporcionaré un vínculo de descarga para el código proporcionado en el archivo FormsAuthLogger.zip.

Señalaré las principales áreas:

Como siempre, no dude en enviar ideas sobre temas que desea examinarse en futuras columnas o en la Base de conocimientos mediante la
Preguntar para el formulario.
Propiedades

Id. de artículo: 910439 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios