Autentificación de usuarios en un sitio web

En este breve tutorial vamos a revisar la manera de realizar una gestión de usuarios en un sitio Web programado en ASP.NET 1.1 o 2.0 y mediante C#.

Cabe destacar que vamos a presentar dos tipos de roles, Administrador y Usuario. Los usuarios que se autentifiquen correctamente, recibirán un rol, y en función de ese rol, podrán acceder a unos directorios u otros del sitio Web.

Tenemos que comenzar preparando nuestro fichero web.config de la siguiente manera:

<system.web>
   <customErrors mode=»Off»/>
   <authentication mode=»Forms»>
      <forms name=».ASPXFORMSDEMO» loginUrl=»login.aspx» protection=»All» path=»/» timeout=»30″/>
      <passport redirectUrl=»internal»/>
   </authentication>
   <compilation debug=»true»/>
   <authorization>
      <allow users=»*»/>
   </authorization>
</system.web>
<location path=»administracion»>
   <system.web>
      <authorization>
         <deny users=»?»/>
         <deny roles=»Usuario»/>
         <allow roles=»Administrador»/>
      </authorization>
   </system.web>
</location>
<location path=»privado»>
   <system.web>
      <authorization>
         <deny users=»?»/>
         <allow roles=»Usuario»/>
      </authorization>
   </system.web>
</location>

Se crean dos roles, Usuario y Administrador. Cada uno de ellos tendrá permisos en el directorio privado y en el directorio administracion respectivamente.

Ahora lo que tienemos que trabajar la autentificacion, que en este caso la vamos a hacer mediante una cookie.

Básicamente lo que hay que hacer es que cuando un usuario se intenta autentificar, hay que asignarle por código (c# o vb.net) qué rol le pertenece. Posteriormente el sistema se ocupará, según lo definido en webconfig de permitirle «quedarse en el directorio» o redireccionarle a la página que ponemos más arriba, en la parte del web.config.

El comportamiento del tipico botón Entrar de un sitio web podría ser el siguiente:

if (el usuario se ha autentificado correctamente en la web)
{
   FormsAuthenticationTicket tkt;
   String cook, sNombre;
   HttpCookie ck;
   sNombre = usuario;
   tkt = new FormsAuthenticationTicket(1, sNombre, DateTime.Now, DateTime.Now.AddMinutes(30), false, i + «»);
   cook = FormsAuthentication.Encrypt(tkt);
   ck = new HttpCookie(FormsAuthentication.FormsCookieName, cook);
   Page.Response.Cookies.Add(ck);
}

En éste código básicamente se ha creado la cookie y en el momento de añadirla, se dispara el evento de autentificación que comentamos más abajo.

Como nota aclaratoria, la variable i almacena un 1 ó un 2 si el usuario (segun nos haya dicho la base de datos al confrontarlo con la user/pass) administrador o usuario normal respectivamente.

Ahora tenemos que añadir al sitio web un componente del tipo Global.asax
y dentro de él programar el siguiente evento: Application_AuthenticateRequest con un código similar a éste:

if (!(HttpContext.Current.User == null))
{
   if (HttpContext.Current.User.Identity.AuthenticationType == «Forms»)
   {
      FormsAuthenticationTicket tkt;
      tkt = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
      String[] usuarios ={ «» };
      if (Convert.ToInt32(tkt.UserData) == 1)
      {
         //usuario administrador
         usuarios[0] = «Administrador»;
      }
      else
      {
         if (Convert.ToInt32(tkt.UserData) == 2)
         {
            //usuario normal
            usuarios[0] = «Usuario»;
         }
         else
         {
            //usuario mal autenticado
            Response.Redirect(«http://www.tuweb.com/login.aspx»);
         }
      }
      //En este momento asignamos el rol que le ha correspondido
      System.Web.Security.FormsIdentity id;
      id = (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
      HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, usuarios);
   }
}

Este evento es el que se dispara cuando un usuario pretende autentificarse. Entonces es en este punto donde se le asigna (en función de su user/password) qué rol tiene el usuario.

En éste artículo he contado con la colaboración de mi compañero de carrera www.jlrodriguez.net

Quizá te interese...
Deja un comentario...
Suscribirme
Notificación de
guest
0 Comentarios
Comentarios en línea
Ver todos los comentarios