2011-03-11 12 views
6

Estoy usando el control de inicio de sesión de ASP.NET. Deseo poder establecer el tiempo de espera para la Autenticación de formularios individualmente para cada usuario (en lugar de globalmente en el web.config). Por lo que entiendo, la única forma de hacerlo es establecer manualmente el tiempo de espera en AuthenticationTicket. ¿Hay alguna manera de hacer esto al usar el Control de inicio de sesión? Me parece que el Control de inicio de sesión abstrae todo esto. Espero que haya alguna forma de continuar usando el Control de inicio de sesión, pero también tengo la capacidad de configurar el tiempo de espera FormsAuthentication para cada usuario.¿Es posible establecer el Ticket de autenticación manualmente cuando se utiliza el Control de inicio de sesión de ASP.NET?

Gracias, Corey

Respuesta

7

MSDN says:

El evento loggedin se eleva después de los controles de proveedor de autenticación las credenciales del usuario y la cookie de autenticación están en cola en y se envían al navegador en la siguiente respuesta . Use el evento LoggedIn para proporcionar procesamiento adicional, como accediendo a los datos por usuario, después de que el usuario esté autenticado.

Este evento parece ser el lugar adecuado para reemplazar las cookies. En primer lugar, la necesidad de galletas para ser recuperada y se descifra:

HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName]; 
FormsAuthenticationTicket oldAuthTicket = 
    FormsAuthentication.Decrypt(authCookie.Value); 

justo después de esto, el nuevo vale de autenticación basado en apenas extraído debe ser creado:

FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
    oldAuthTicket.Version, 
    oldAuthTicket.Name, 
    DateTime.Now, 
    DateTime.Now.Add(timeoutForUser), 
    oldAuthTicket.IsPersistent, 
    oldAuthTicket.UserData, 
    FormsAuthentication.FormsCookiePath 
); 

timeoutForUser aquí es un valor TimeSpan que mantiene la tiempo de espera de la sesión para el usuario.

Y, por último, la vieja cookie en la respuesta debe ser reemplazado por uno nuevo:

string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 
authCookie = 
    new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
HttpContext.Current.Response.Cookies.Set(authCookie); 

Esto debería hacer el truco.

+0

Gracias! Eso funcionó perfectamente. ¡Eres el hombre! –

1

El control de acceso tiene LoggingIn y LoggedIn eventos que se puede utilizar para manejar la autenticación de sí mismo.

Puede cancelar el proceso de inicio de sesión en caso LoggingIn estableciendo e.Cancel = True y luego crear un ticket de forma manual utilizando las nuevas new FormsAuthenticationTicket(...)

Cuestiones relacionadas