2010-01-24 17 views
7

Implementé la autenticación personalizada en ASP.NET MVC. Si un usuario válido intenta iniciar sesión, configuro el HttpContext.User = user en el método de inicio de sesión del AccountController. Pero permanece allí solo por que solicite. ¿Cómo puedo configurarlo para la sesión?Establezca HttpContext.User para la sesión

He usado una alternativa, set HttpContext.Session["CurrentUser"] = user. Si quiero ver si la sesión está autorizada, tendría que verificar que el HttpContext.User != null. Pero, no quiero exponer la lógica de autenticación en todas partes en la aplicación. Si necesito cambiar eso, sería desordenado.

Por favor, ayúdame a resolver esto. Una solución podría estar rellenando la propiedad HttpContext.User de cada solicitud con el valor HttpContext.Session["CurrentUser"] al principio, pero no sé cómo hacerlo.

Respuesta

11

Escriba el siguiente método en la clase de aplicación del Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpContext.Current.User = HttpContext.Session["CurrentUser"]; 
} 

o puede utilizar la propiedad "usuario" de System.Web.Mvc.Controller que se hereda a los controladores (Nota: asegúrese para llamar al método FormsAuthentication.SetAuthCookie cuando valide con éxito su inicio de sesión de usuario).

+0

¿Cuál es el equivalente para esto en '.Net Core'? –

+0

También me encontré con el mismo problema en .net core. Lo intento desde hace muchos días pero no encontré ninguna solución auténtica. Por favor, avíseme si encuentra alguna solución. – Saif

6

La mejor manera de hacerlo es escribir un módulo de autenticación personalizado y conectarlo a su aplicación. Este módulo se ejecutará antes de cualquier solicitud y tendrá la oportunidad de establecer la propiedad HttpContext.User según corresponda.

Por ejemplo, considere el módulo Autenticación de formularios. Antes de que se ejecute su controlador HTTP (ya sea una página .aspx, la interconexión de MVC, etc.), tiene la posibilidad de interceptar la solicitud. Lee el valor de una cookie de inicio de sesión, descifra y verifica el valor de la cookie encriptada, y establece HttpContext.User si pasan las verificaciones. De esta forma, cuando el controlador se ejecuta y realmente procesa la solicitud, la propiedad Usuario ya se ha configurado correctamente.

Al final, lo que parecerá es que no necesita un atributo de autorización personalizado en ASP.NET, ya que el atributo [Autorizar] ya proporcionado en la caja debería funcionar automáticamente con su módulo de autenticación personalizado. Sin embargo, su método AccountController.LogOn() (o lo que sea que use en lugar de esto) necesitará comunicarse con el proveedor de autenticación apropiado que genera el token que será validado por el módulo de autenticación. Este debería ser el único lugar donde necesitaría escribir un código diferente de lo que se proporciona en la caja.

Consulte http://social.msdn.microsoft.com/Search/en-US?query=http%20modules y http://social.msdn.microsoft.com/Search/en-US?query=custom%20authentication%20asp.net para obtener más información.

Cuestiones relacionadas