Blog de Jorge Pedraza

enero 23, 2012

Unicidad de Acceso de Usuario en ASP.NET

Filed under: Aplicaciones Web,Seguridad — JorgePedraza @ 6:14 am
Tags:

Hola, el presente artículo tiene como finalidad resaltar una técnica fácil y sencilla de implementar para validar la unicidad de acceso de cuentas de usuarios contra determinada solución ASP.NET.

La idea principal es reproducir y validar el escenario de cuando uno o más usuarios inician sesión con una misma cuenta de usuario (Login y Password) de forma concurrente o recurrente, contra determinada sitio web de ASP.NET a través de la autenticación por formulario.

Un ejemplo clásico de esto es el sistema Login Windows Live  ID de Hotmail, el cual lleva un mecanismo bien estructurado para permitir múltiples variantes de Login con una determinada cuenta de usuario.

Entonces a continuación se detalla la técnica.
Requisitos:
1.    Microsoft Visual Studio 2010 con SP 1
2.    Experiencia con Lenguaje Visual Basic 2010 o C# 2010
3.    Conocimiento fundamental de Autenticación por formulario de ASP.NET

Elementos claves de la técnica de Unicidad:
1.    Soporte de Autenticación por formulario de ASP.NET
2.    Objeto Application de ASP.NET
3.    Objeto Session de ASP.NET
4.    Propiedad SessionID del Objeto Session (HttpSessionState)

Descripción de la técnica de Unicidad:
Por defecto la técnica se enfoca en mantener un registro de los usuarios autenticados de forma global a través de objeto Application para ser usado en combinación con el Objeto Session de cada usuario anónimamente único.
Para estos se inicia con el formulario Login.aspx, donde una vez validado el usuario se procede a usar el siguiente fragmento de código:

Dim iduser As String = “1”
Dim cadusuario As String = “Demo”

Me.Session("usuario") = cadusuario
Me.Session("id_usuario") = iduser

Application.Lock()
If Application.Item(iduser) Is Nothing Then
    Application.Add(iduser, Me.Session.SessionID.ToString)
Else
    Application.Item(iduser) = Me.Session.SessionID.ToString
End If
Application.UnLock()
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(cadusuario, False)

 

Ahora desde determinada página formulario WebForm o página maestra Site.Master se puede usar el evento Init para colocar el siguiente código:

If Session("id_usuario") Is Nothing OrElse Application(Session("id_usuario")) <> Me.Session.SessionID.ToString() Then
   ‘CerrarSesion()
   lblmensajemain.Text = "Atención otro usuario ha iniciado sesión con la actual cuenta de Usuario, consulte con el Administrador"
End If

Finalmente se concreta la técnica, la cual puede llegar a ofrecer a los usuarios una advertencia o cierre abrupto de la sesión dejando en teoría solo la última sesión activa valida vinculado con determinada cuenta de usuario autenticado.

Nota Importante: Esta técnica fue probado en diferentes navegadores, entornos y frecuencias de tiempo, el cual ha obtenido excelente resultado. De toda manera si usted presenta alguna anomalía, por favor póngase en contacto conmigo para estudiar toda alternativa de reestructuración de la misma.

Código fuente:

En Resumen:

Esta alternativa permite construir soluciones Web más escalable y segura sin necesidad de recurrir a complejo mecanismo de persistencias de datos, para hacer seguimiento de sesiones de usuarios autenticados de forma consistente.

Enlaces de Interés:

  1. HttpSessionState Class
  2. HttpSessionState.SessionID Property
  3. HttpApplicationState Class
  4. How to: Implement Simple Forms Authentication

4 comentarios »

  1. Excelente!
    Muchas Gracias.

    Comentario por Eduardo Vergara C. (@eduvergara) — enero 23, 2012 @ 8:30 am | Responder

  2. […] Unicidad de Acceso de Usuario en ASP.NET By Jorge Pedraza Veliz […]

    Pingback por Agenda de la Comunidad (24 al 29 de Enero 2012) | MSDN Blogs — enero 24, 2012 @ 2:31 pm | Responder

  3. hola antes que nada doy gracias por el post muy bueno y descriptivo, solo una duda que diferencia hay entre usar application o cache

    saludos

    Comentario por Victor Vidal — octubre 9, 2012 @ 4:52 pm | Responder

    • Hola.
      Gracias por tu comentario.
      Con respecto a tu consulta:
      El Objeto Application y Cache Application son similares, solo que Cache Application posee mecanismo de expiración.

      Saludos.

      Comentario por JorgePedraza — octubre 10, 2012 @ 9:19 am | Responder


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: