2009-02-19 21 views
5

En mi aplicación web ASP.NET, quiero verificar cada vez que el usuario intenta obtener una página de mi aplicación si el usuario existe en la base de datos (por supuesto, después de la primera vez que ahorramos los detalles del usuario en la sesión). Intenté usar el evento Application_AuthenticateRequest en el global.asax para comprobar para cada solicitud, pero la sesión no existe en este caso. Necesito un consejo sobre dónde puedo poner mi lógica de autorización de que todavía tendría los datos de la sesión disponibles (para reducir el acceso a db).Verificación de autorización usando Global.asax

Respuesta

1

Puede usar SqlMembershipProvider (o un proveedor personalizado si no usa MSSQL) y denegar usuarios no autenticados de toda la aplicación, excepto desde la página de inicio de sesión. Esta verificación se limitará a la hora de inicio de sesión ya que el ticket de autenticación se almacenará en sesión o como una cookie en la máquina del usuario.

Más detalles en How To: Use Membership in ASP.NET 2.0 y Examining ASP.NET 2.0's Membership, Roles, and Profile

5

Suenas como si usted está "rodando su propio" sistema de autenticación.

Me gustaría investigar el uso de ASP.NET incorporado en el sistema Forms authentication que se utiliza comúnmente con un ASP.NET Membership Provider. Ya existen proveedores integrados para SQL Server, y puede crear su propio Proveedor de Membresía heredando de la clase base System.Web.Security.MembershipProvider.

Básicamente, los proveedores de membresía de ASP.NET generalmente funcionan configurando una cookie del lado del cliente (también conocida como Ticket de autenticación) en el navegador del cliente, una vez que el cliente se ha autenticado correctamente. Esta cookie se devuelve al servidor web con cada solicitud de página posterior, lo que permite ASP.NET, y por lo tanto su código, para determinar quién es el usuario, por lo general con una sola línea de código de este modo:

string username = HttpContext.Current.User.Identity.Name; 
// The above gets the current user's name. 

if(HttpContext.Current.User.Identity.IsAuthenticated) 
// Do something when we know the user is authenticated. 

A continuación, no debería necesitar almacenar nada en el estado de la sesión. Por supuesto, si quiere para almacenar datos específicos del usuario en una variable de sesión (es decir, datos de usuario que pueden no ser parte de la autenticación de un usuario, tal vez el color favorito del usuario, etc.) entonces puede almacenar eso en una variable de sesión (después de recuperarlo del DB cuando el usuario se autentica por primera vez). La variable de sesión podría almacenarse según el nombre del usuario (asumiendo nombres únicos) y recuperarse mediante un código similar al anterior, que obtiene el nombre del usuario actual para acceder al objeto de sesión correcto.

Uso de la autenticación de formularios incorporados también le permitirá "proteger" áreas de su sitio web de usuarios desautorizado con sencillo código declarativa que va en su web.config, por ejemplo:

<authorization> 
    <deny users="?"/> 
</authorization> 

Agregar lo anterior a su web.config "principal" garantizaría que ninguna de sus páginas sea accesible para usuarios no autorizados (aunque es probable que nunca lo haga en realidad, solo se trata de un ejemplo). El uso de ASP.NET Role Provider en conjunto con el Proveedor de membresía le dará una granularidad aún mayor sobre quién puede acceder o no a varias secciones de su sitio web.