Solucionar problemas de autenticación mediante formularios

Seleccione idioma Seleccione idioma
Id. de artículo: 910439 - Ver los productos a los que se aplica este artículo
Columna de voz de soporte ASP .NET

Solución de problemas de autenticación mediante formularios

Para personalizar esta columna a sus necesidades, queremos invitar a que la envíe sus ideas sobre temas de interés para usted y los problemas que desea ver abordaron en próximas columnas de voz de soporte técnico y artículos de Knowledge Base. Puede enviar sus ideas y comentarios utilizando el Solicite . También hay un vínculo al formulario en la parte inferior de esta columna.
Expandir todo | Contraer todo

En esta página

Bienvenido a la columna de voz de soporte de ASP.NET. Mi nombre es Jerry Couto. Han trabajado con Microsoft durante 5 años y han pasado la mitad de mi el tiempo se centró en tecnologías relacionadas con el Web como Microsoft FrontPage y el nuevas tecnologías de Microsoft SharePoint. He pasado el último año de trabajar con Microsoft ASP.NET como ingeniero de soporte técnico. Este mes en la voz de soporte técnico columna, voy a explicar cómo solucionar problemas de autenticación de formularios en Microsoft ASP.NET.

Solución de problemas de autenticación mediante formularios

Al utilizar la autenticación de formularios en una aplicación ASP.NET, puede ser necesario solucionar un problema que se produce cuando el usuario al azar se redirige a la página de inicio de sesión. En un mundo ideal, esto problema podría producirse de manera que le permita adjuntar fácilmente un depurador y captura el problema. En entornos de producción, sin embargo, esto no suele el caso. Para solucionar un problema aleatorio como éste, necesita registrar información relacionada con el problema para que pueda acotar la raíz causa.

En esta columna, trataremos brevemente el Concepto de autenticación de formularios. A continuación, comentaremos en qué escenarios dar lugar a un usuario se redirige a la página de inicio de sesión y cómo capturar datos que es relevante para aislar el problema. También analizaremos cómo implementar una interfaz 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 a un sitio Web mediante el uso de la autenticación mediante formularios 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 al la aplicación y la clase FormsAuthenticationModule descifra el valor de cookie y Determina si el usuario es válido o no.

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

Ésta 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 la autenticación utilizando la autenticación mediante formularios es similar al siguiente:
  1. El cliente envía un HTTP GET a Default.aspx. No se envía 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 autenticación mediante formularios, visite los siguientes sitios Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/7t6b43z4.aspx
http://msdn2.Microsoft.com/en-us/library/System.Web.Security.FormsAuthentication (inglés) .aspx
http://msdn2.Microsoft.com/en-us/library/System.Web.Security.FormsAuthenticationTicket (inglés) .aspx
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:
http://QuickStarts.ASP.NET/QuickStartv20/ASPNET/doc/Security/FormsAuth.aspx

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 el Clase FormsAuthenticationModule no recibe la cookie. Se puede determinar si una solicitud de usuario no contiene la cookie habilitando la cookie inicio de sesión en Microsoft Internet Information Services (IIS). Para ello, siga estos pasos:
  1. Abra Microsoft Management Console (MMC) de IIS.
  2. Haga clic en el sitio Web y, a continuación, haga clic enPropiedades.
  3. Haga clic en el Sitio Web ficha y, a continuación, haga clic en Habilitar Registro.
  4. Asegúrese de que es el formato de registro Archivo de registro extendido de W3C Formato.
  5. Haga clic en Propiedades.
  6. Haga clic en el Avanzada ficha y, a continuación, haga clic enPropiedades extendidas.
  7. Bajo Propiedades extendidas, haga clic para seleccionar la Cookie(cs(cookie)) casilla de verificación y el Sitios de referencia (cs(Referer)) casilla de verificación.
Después de que se produce este problema, determinar 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 cookie> columna.

Nota Puede utilizar Log Parser para analizar los registros de IIS. Para descargar Log Parser, visite el siguiente sitio Web de Microsoft:
http://www.Microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07
Una vez que la lista de solicitudes de que las recibe búsqueda de las solicitudes a la página de inicio de sesión de usuario. Se sabe que se han redirigido a esta página y desea ver las solicitudes antes de la se ha producido la redirección. Si ve algo similar a la siguiente, el cliente cualquiera no envió que la cookie o la cookie se ha quitado de la red entre el cliente y el servidor.

Este es el inicio de sesión.
Contraer esta tablaAmpliar esta tabla
MétodoPáginaRespuestaCookies
GET/ Default.aspx302 (Redirección)No Cookies
GET/Login.aspx200 (Correcto)No Cookies
POST/Login.aspx302 (Redirección)No Cookies
GET/ Default.aspx200 (Correcto).ASPXAUTH
GET/SomePage.aspx302 (Redirección)No .ASPXAUTH Cookie
Estas son otras solicitudes, seguidos de una solicitud a una página en el sitio sin el.Cookie ASPXAUTH.
Contraer esta tablaAmpliar esta tabla
MétodoPáginaRespuestaCookies
GET/SomePage.aspx302 (Redirección)No .ASPXAUTH Cookie
GET/Login.aspx200 (Correcto)No .ASPXAUTH Cookie
POST/Login.aspx302 (Redirección)No .ASPXAUTH Cookie
GET/SomePage.aspx200 (Correcto).ASPXAUTH

Nota La primera solicitud de que el usuario no es probable que tenga una de las formas cookie de autenticación a menos que se va a crear una cookie persistente. El registro de IIS sólo muestran las cookies que se recibieron en la solicitud. Será la primera solicitud para que la cookie de autenticación de formularios en la solicitud después de un éxito intento de inicio de sesión.
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 la cookie de xx crea en el cliente, se quitan las cookies anteriores desde el cliente colección. 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. Buscar sólo en la solicitud antes de la redirección a la página de inicio de sesión. Si genera la solicitud a esta página las cookies, esto será algo a investigar.

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
306070Límites de números y tamaño de una cookie en el Explorador de Internet

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 Encabezados Para ver el encabezado Set-Cookie. Si realiza un seguimiento de un iniciar sesión correctamente, aparecerá el encabezado Set-Cookie en la respuesta de un inicio de sesión correcto.

Para descargar Fiddler, visite el siguiente sitio Web de Fiddler:
http://www.fiddlertool.com/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 es un dispositivo de red Quitando la cookie, se debe capturar una traza de red en el cliente y el servidor, y, a continuación, busque en el cuerpo de la solicitud de la cookie. Que desea Observe en la solicitud de cliente para asegurarse de que se envió la cookie y compruebe el servidor seguimiento para asegurarse de que el servidor ha recibido la cookie.

Solicitud de cliente

Se trata de una solicitud GET después de que el usuario ha sido autenticado. El información del vale de autenticación de formularios se resalta en azul. Este modo se confirma que la información de cookie deja el cliente. Cuando se utiliza una captura de red herramienta, como Netmon, ver el tráfico que llegó a través de la adaptador.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 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 el enviada el cliente. Si el servidor no ha recibido la misma información, deberá investigar otros dispositivos en el red para determinar dónde se ha quitado la cookie.

Nota También se han realizado las instancias de la eliminación de cookies de los filtros ISAPI. Si se confirma que el servidor Web recibe la cookie, pero no aparece la cookie en los registros de IIS, compruebe los filtros ISAPI. Puede que tenga que quitar los filtros para ver si el se ha resuelto el problema.

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

La otra causa común de un usuario para ser redirigido es si el autenticación mediante formularios vale ha caducado. La autenticación por formularios vale puede tiempo de espera de dos maneras. El primer escenario se produce si utiliza caducidad absoluta. Con una caducidad absoluta, caduca el vale de autenticación cuando el caduca el tiempo de caducidad. Por ejemplo, establezca 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 2:20 PM.

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

Es una manera de enfocar este tipo de problema iniciar los formularios información de cookie y el vale de autenticación. De este modo, puede ver si el cookie fue recibida por IIS y cuáles son los valores. Puede hacerlo mediante la escritura un HttpModuley, a continuación, conectar ese módulo en la canalización de solicitudes. No tendrá que modificar el código de la aplicación para obtener la información es necesario.

El ejemplo que se adjunta trabaja en el de Microsoft.NET Framework 1.1 y 2.0 de.NET Framework y comentarios a lo largo. El ejemplo incluye los siguientes archivos:
  • FormsAuthEvents.cs: La clase que implementa la interfaz IHttpModule y vínculos en el evento Application_BeginRequest .
  • FormsAuthInfo.cs: La clase que recupera la cookie y descifra el vale de autenticación de formularios. También comprueba la aplicación Archivo Web.config para asegurarse de que la autenticación de formularios está habilitada.
  • FormsAuthConfig.cs: La clase que lee la información de la Archivo FormsAuthLogger.config.
  • Log.cs: El archivo que acepta un objeto stringbuilder y escribe los valores de en un archivo de registro.
  • FormsAuthLogger.config: El archivo XML que puede es leído por el archivo Log.cs. Esto archivo tiene que estar en la carpeta /bin con el archivo DLL generado. El archivo le permite configurar lo siguiente:
    • Filtrar por IP: puede filtrar la captura de datos por IP del cliente. De este modo, puede iniciar sesión sólo a las solicitudes desde un cliente que se sabe que reproducir el problema. Esto reduce el tamaño del registro.
    • Tipo de captura: Especifica dónde desea guardar el archivo. El valor predeterminado es la carpeta archivos temporales de ASP.NET, pero puede guardar este en cualquier parte siempre y cuando la cuenta de proceso de trabajo tiene la capacidad para escribir en el carpeta.
Nota Voy a ofrecer un vínculo de descarga para el código proporcionado en el Archivo FormsAuthLogger.zip.

Señalaré aquí las áreas principales:
  1. Cree una clase que implementa la interfaz IHttpModule .
    public class FormsAuthEvents : IHttpModule 
    {
    		?code?
    }
  2. Conectar el evento que desea mirar. En este ejemplo, estamos utilizando el evento Application_BeginRequest . Esta forma podemos investigar cada solicitud y determinar si tiene la cookie de autenticación de formularios y registro de la clase FormsAuthenticationTicket si existe la cookie.
    public void Init(HttpApplication application) 
    {
    	//Wire up the BeginRequest event
    	application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. Implementar el evento Application_BeginRequest .
    private void Application_BeginRequest(Object source, EventArgs e)
    {	
       ?code to log the ticket?
    }
    
  4. Recuperar la cookie de autenticación de formularios y, a continuación, descifrar él.
  5. Inicie una sesión de los valores. Recomendaría de inicio de sesión lo siguiente Además de la información de formularios. Esto le ayudará a alinear los formularios información de autenticación en los registros IIS, si es necesario:
    • Fecha: Permite ver cuándo llegó la solicitud en el.
    • RequestType: Muestra si la solicitud es una operación Get o una POST.
    • Dirección URL: Muestra el modelo de solicitudes que acaban en el problema.
    • Sitio de referencia
    • ClientIP: Vincula las solicitudes a una determinada cliente.

Como siempre, no dude en enviar ideas sobre temas que desee Tratado en los próximos artículos o en la Base de conocimientos mediante la Solicite .

Propiedades

Id. de artículo: 910439 - Última revisión: domingo, 7 de abril de 2013 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
Palabras clave: 
kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 910439

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com