lunes, 4 de junio de 2012

Autenticación basada en Formularios para la Web

La autenticación o autentificación (los dos términos son validos) basada en formulario es muy importante cuando queremos que el contenido de nuestro directorio este en una sección privada y que su acceso sea mediante validación de usuario.
Para implementar este tipo de autenticación debemos modificar el archivo web.config en donde negaremos la entrada a usuarios anónimos.
 En la realización de este ejemplo supondremos que tenemos dos formularios web, uno donde los usuarios se autenticaran, y otro que los usuarios verán después de haber validado su usuario y contraseña. Al primero llamaremos inicio.aspx y al segundo menú.aspx
Ya con esto podemos iniciar:
Nuestra atención debe estar en la parte de <authentication></authentication> en donde diremos el modo de autentificación.(En el archivo web.config que estamos editando)

<configuration>
   <system.web>
     <authentication mode="Forms">
        <forms defaultUrl="menu.aspx" loginUrl="inicio.aspx" name=".aspAuth">
        </forms>
      </authentication>
    </system.web>
<configuration>
Muy bien como notamos la autenticación es en modo formulario por esto mode=”Forms”, lo siguiente es decir cuál es el formulario para hacer login y cuál es el formulario principal que verán los usuario después de validarse esto lo hacemos en defaultUrl y loginUrl. En defaultUrl fijamos el formulario que los usuarios verán después de validarse y en loginUrl el formulario donde el usuario hará login.
Este modo de autentificación utiliza la cookies del navegador para establecer la identidad del usuario, en name=".aspAuth" asignamos el nombre de la cookie que guardara los datos de la autenticación, si no le damos un nombre se asignará por defecto .aspAuth, en el caso de tener más de una aplicación en nuestro servidor web, lo mejor sería asignar un nombre diferente para cada aplicación.
Lo siguiente sería negar la entrada a usuarios anónimos:
<configuration>
    <system.web>
        <authentication mode="Forms">
          <forms defaultUrl="menu.aspx" loginUrl="inicio.aspx" name=".aspAuth">
          </forms>
        </authentication>
        <authorization>
             <deny users="?"/>
         </authorization>
      </system.web>
<configuration>
? = todo los usuarios anonimos
*= todos los usuarios no importa si es anónimo o autenticado
Con esto tenemos ya todo preparado para decirle a la aplicación mediante código C# como autenticar a los usuarios:
Lo primero seria ver si el usuario existe en la base de datos, aquí le mostraremos un ejemplo sencillo para hacer esto con la idea de mostrar la lógica de este método de autenticación, pero en la realidad lo más prudente es cifrar la contraseña y validar los datos de entrada.
Importamos los Namespace:
System.Data
System.Data.SqlClient
System.Security

Public bool Entrar(string usuario,string passwd)
{
   SqlConnection conexion = new SqlConnection();
   conexion.ConnectionString = "Data Source=Servidor;Initial Catalog=DB; User Id=user;   Password=passs;";
    string consulta = "SELECT * FROM TbUsuario WHERE Usuario=@Usuario AND Passwd=@Passwd";
    SqlCommand cmd_user = new SqlCommand(mi_selec, conexion);
    cmd_user.Parameters.Add("Usuario", SqlDbType.Char).Value = txtUsuario.Text.Trim();
    cmd_user.Parameters.Add("Passwd", SqlDbType.Char).Value = txtPasswd.Text.Trim();
     DataTable dt_user = new DataTable();
     SqlDataAdapter da_user = new SqlDataAdapter();
     da_user.SelectCommand = cmd_user;

     try
     {
         da_user.Fill(dt_user);
         return (dt_user.Rows.Count == 1);
     }
     catch (Exception ex)
     {
         label.Text = "Error: " + ex.Message;
     }
}
Ahora cuando el usuario de click en el boton validarse utilizamos esta función que creamos con el nombre Entrar() esta nos regresará true si el usuario existe o false sino existe.
protected void btnlogin_Click(object sender, EventArgs e)
{
     If(Entrar(txtusuario.Text,txtpasswd.Text)==true)
     {
          //si existe lo mandamo al menu.aspx
          FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text.Trim(),false);
      }
     Else
     {
          // el usuario no existe
          Label.Text = “Usuario o contraseña incorreta”;
     }
}
Listo asi de sencillo si el usario existe llamamo al método RedirectFromLoginPage de la clase FormsAuthentication que nos direcciona a la pagina del menú. Como vemos este método recibe dos parámetros el nombre del usuario y si se va a crear una cookie persistente para que recuerde el nombre del usuario en el próximo ingreso al sitio.
Tambien en la clase FormsAuthentication encontramos dos métodos muy utiles:
FormsAuthentication.SingOut() = Termina la sesión.
FormsAuthentication.RedirectToLoginPage() = Me manda a la pagina del login.
Estos dos mentos los puedes utilizar en un botón Terminar Session.
Espero que esto haya sido de tu ayuda.

No hay comentarios:

Publicar un comentario