Estoy confundido con el almacenamiento en caché y la autorización de ASP.NET MVC y en la necesidad urgente de alguna aclaración.Autorización y ASP.NET MVC Caching
Mi atributo de autorización hecho a sí mismo hereda de AuthorizeAttribute
. Su método AuthorizeCore
reemplazado se ejecuta siempre, incluso si configuré un atributo [OutputCache]
en una acción del controlador. Yo entiendo esa parte.
Ahora el doblador de la mente para mí: AuthorizeCore
se fallar cada vez que ahora, cuando en realidad hago memoria caché de salida y la página se sirve de la caché. La razón es que cuando la solicitud se almacena en caché, el httpContext.Session
suministrado con AuthorizeCore
es null
? Aquí hay un código simplificado:
protected override bool AuthorizeCore(HttpContextBase httpContext) {
return (Session["userId"] != null)
}
Así que si httpContext.Session
es null
, esto, obviamente, cada vez que falla. Sin embargo, necesito acceder a la sesión, ¿de qué otra manera puedo verificar si la solicitud está autorizada? Esto no tiene ningún sentido - si así es como debería ser entonces nunca ser capaz de usar páginas en caché junto con la autenticación en ASP.NET MVC. ¿Ayuda?
Entonces, ¿está diciendo que si tuviera que utilizar un proveedor de membresía personalizado basado en el proveedor de membresía asp.net regular podría verificar la autenticación del usuario con el almacenamiento en caché? ¿Por qué funciona eso? El proveedor de membresía necesita la sesión también internamente, ¿no? – Alex
Nunca es seguro poner información sensible a la seguridad en la sesión, punto. –
Y no, el proveedor de membresía regular no tiene casi nada que ver con la Sesión. Lea los dos últimos enlaces en mi respuesta. –