0 calificaciones0% encontró este documento útil (0 votos)
91 vistas7 páginas
Este documento explica cómo configurar la autenticación basada en formularios en IIS y .NET para crear una zona privada en un sitio web. Primero, se configura el modo de autenticación en web.config y se deniega el acceso a usuarios anónimos en el directorio privado. Luego, se crea un formulario de inicio de sesión para validar los usuarios, ya sea mediante credenciales configuradas en web.config o consultando una base de datos. Una vez autenticado, el usuario puede acceder al contenido privado protegido.
Este documento explica cómo configurar la autenticación basada en formularios en IIS y .NET para crear una zona privada en un sitio web. Primero, se configura el modo de autenticación en web.config y se deniega el acceso a usuarios anónimos en el directorio privado. Luego, se crea un formulario de inicio de sesión para validar los usuarios, ya sea mediante credenciales configuradas en web.config o consultando una base de datos. Una vez autenticado, el usuario puede acceder al contenido privado protegido.
Este documento explica cómo configurar la autenticación basada en formularios en IIS y .NET para crear una zona privada en un sitio web. Primero, se configura el modo de autenticación en web.config y se deniega el acceso a usuarios anónimos en el directorio privado. Luego, se crea un formulario de inicio de sesión para validar los usuarios, ya sea mediante credenciales configuradas en web.config o consultando una base de datos. Una vez autenticado, el usuario puede acceder al contenido privado protegido.
(IIS y .Net). 1. - Introduccin. En este manual vamos a crear una zona privada para nuestra web alojada en un servidor IIS y con el .Net FrameWork instalado, para con unas lneas en ASP .Net validemos los datos insertados por los usuarios en el correspondiente formulario de acceso. Resulta til, sobre todo cuando no tenemos acceso a la configuracin de usuarios y privacidad de las carpetas en el disco duro del servidor en el que se aloja nuestra web, y queremos hacer una seccin privada en la que restringir el acceso a los usuarios annimos que navegan por nuestro site, mediante la solicitud y validacin de login y password. Tambin puede utilizarse para que las herramientas de administracin de nuestro site estn protegidas contra el acceso de usuarios ajenos a la administracin. Se explicarn la configuracin del web.config de la aplicacin y del directorio privado y dos formas para validar el acceso de los usuarios. La ms sencilla con los usuarios validos configurados en el web.config. La otra, un poco ms compleja, mediante una consulta a una base de datos SQL para localizar a los usuarios validos. Los usuarios se validarn en el correspondiente formulario de autenticacin, dicha autenticacin utiliza cookies del navegador para comprobar, segn navegamos, los permisos de acceso al directorio, subdirectorios y ficheros de la zona privada. Una vez configurado el directorio privado no podemos acceder al contenido de este salvo que dispongamos de la autenticacin adecuada almacenada en una cookie. 2.- Qu necesitamos? Para activar la autenticacin de formularios bsica en una aplicacin, realizaremos los siguientes pasos: Configurar el modo de autenticacin modificando la seccin authentication en el web.cofig de la aplicacin. Denegar el acceso a los usuarios annimos en uno o ms directorios de la aplicacin, mediante la modificacin de la seccin authorization en los archivos web.config de los directorios privados Creara una pgina de registro con un formulario que permita la identificacin de usuarios. Para la validacin contra la base de datos, necesitaremos un servidor de base de datos en el que configuraremos una tabla de usuarios y un procedimiento almacenado. Para empezar vamos a crear un directorio, PRIVADO, y dentro de este una pgina default que nos muestre un "HOLA MUNDO PRIVADO" para validar que vemos el directorio en nuestra web. 2
3.- Modificando el web.config. Con el directorio privado que hemos creado, y desde el cual podremos colgar todas nuestras herramientas administrativas del site, como el acceso a descargas o imgenes personales, tenemos que realizar una serie de modificaciones en el web.config En este tutorial no nos vamos a parar en explicar al detalle todas las opciones que se puede usar para la crear un acceso privado, solo nos ocuparemos de las opciones que vamos a usar. El fichero web.config se encuentra localizado en el directorio raz de la aplicacin web con la que estamos trabajado. Al abrirlo veremos que dentro de la etiqueta system.web se encuentran diferentes opciones, las que ocuparan nuestra atencin son las entradas authentication y authorization, ya que son en las que realizaremos las modificaciones. En el caso de que no exista este archivo web.config podremos crearlo, pero siempre en el raz de la aplicacin. 3.1.- authentication El archivo web.config contendr el siguiente cdigo: Como se puede observar, y parece obvio, el modo de autenticacin de nuestro directorio ser mediante un formulario, quedando esto reflejado en la propiedad mode="Forms" Dentro de la seccin forms se definen el funcionamiento de nuestro formulario: name: el nombre de la cookie de navegador que contiene la entrada de autenticacin. Si no especificamos uno se llamar .ASPXAUTH Recomendamos que si usamos varias aplicaciones en nuestro servidor web se especifique un nombre por aplicacin. loginUrl: indicaremos la pgina a la que se dirigir al usuario, de modo automtico, cuando se precise su identificacin. Si no especificamos una pgina, por defecto se redirige a login.aspx situada en el raz de la aplicacin web. timeout: es el tiempo, en minutos, que la cookie tiene validez, siendo de 30 minutos el valor por defecto. protection: especifica la forma en que se protegen los datos de la cookie. Los valores son All, None, Encryption y Validation, siendo All el valor que se toma por defecto. Por omisin las cookies s encriptan con DES o TripleDES, dependiendo de la capacidad del servidor. <configuration> <system.web> <authentication mode="Forms"> <forms name="FormsAuthDB.nevaAuth" loginUrl="login.aspx" protection="All" timeout="10" path="/"> <credentials passwordFormat="Clear"> <user name="adm" password="myadm"/> </credentials> </forms> </authentication> </system.web> <configuration> 3
El elemento credentials nos servir para configurar los usuarios que tendrn acceso a nuestro directorio privado. Esto es til si no tenemos un listado largo de usuarios y que no queremos o nos es necesario realizar labores de mantenimiento sobre estos. Este elemento es bastante simple de entender ya que se crear una entrada por cada uno de los usuarios que tendrn acceso a las aplicaciones o elementos descargables que tengamos en nuestra zona privada. En estos configuraremos el nombre de usuario y la password. Si deseamos disponer de una mayor seguridad, por si algn curioso lograra acceder al servidor y ver las password podramos encriptarlos utilizando los algoritmos hash SHA1 y MD5, para ello tendramos que cambiar el valor de passwordFormat por SHA1 o MD5. Pero la forma de encriptar este password y acceder a ellas lo trataremos en otra ocasin. 4.- Configurando el directorio Bien, ya tenemos listo el sistema de autenticacin, hemos creado el directorio que deseamos hacer privado y preparada una pgina que nos servir de bienvenida a la zona privada. Ahora solo nos falta hacer que este sea privado. Para ello ser necesario crear un fichero web.config en el raz de nuestro directorio privado. En este web.config configuraremos la seccin authorization, donde denegaremos el acceso a los usuarios annimos. El contenido del web.config ser el siguiente. Dentro de la seccin authorization, se permite las siguientes entradas: deny para denegar usuarios allow para permitir el acceso a usuarios. Ambas entradas tienen la propiedad users donde podemos especificar: ? todos los usuarios annimos. * todos los usuarios, tanto annimos como autenticados. Lista usuarios, se permite especificar un listado de usuarios separados por comas, que tendrn permitido o denegado el acceso segn donde se especifique 5.- La pgina de Login. Bien ya est todo listo, hemos configurado el directorio, le hemos dado las indicaciones a la aplicacin para que nos autentique a los usuarios, hemos definido la autorizacin del directorio, pero no falta hacer logo, ya que sin esto no veremos nunca ese HOLA MUNDO PRIVADO que hemos preparado. <configuration> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </configuration> 4
Pues manos a la obra. Tenemos que crear un formulario web, pero no voy a explicar como hacerlo, se supone que esto ya sabemos hacerlo, pero si no tenemos ganas de golpear teclas, descarga aqu el zip con todo el cdigo. Este formulario web tendr los siguientes elementos: Una caja de textos, con su correspondiente ttulo donde pidamos el nombre de usuario. Una caja de texto, y su titulo, donde pidamos la password, esta tendr la propiedad textmode=Password. Un checbox, con su titulo para que el usuario marque que le recuerde la password en el futuro. Un boto de enviar, y opcional otro de borrar. Una etiqueta para mostrar errores. Opcionalmente podemos insertar el objeto que nos valide que el usuario a insertado los datos de forma correcta en el formulario. Ya hemos creado, pintado y dado color a nuestra pantalla de login. Todo al gusto, no me meto. Como apuntaba al principio de este tutorial, la intencin era ensear dos mtodos de validacin, una por la configuracin de usuarios en el web.config y otra mediante consultas a base de datos. 5.1.- Usuarios en web.config. Ya se ha explicado donde y como se configurar, si no lo tienes claro pincha aqu. Y ahora tenemos que hacer que cuando el usuario pulse el botn enviar se nos valide y de acceso a este al directorio o nos deniegue el acceso en caso de error. Para eso incluiremos el siguiente cdigo en el fichero VB de nuestro formulario: Con IsValid comprobamos si el formulario est correcto, esto era opcional. En la siguiente validacin empieza lo duro, ya que con el mtodo Autenticate de la clase FormsAuthentication, hacemos que se localice en el web.config el nombre de usuario y la Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Validacin con usuarios en el WebConfig. If IsValid Then If System.Web.Security.FormsAuthentication.Authenticate(tbLogin.Text, tbPassword.Text) Then System.Web.Security.FormsAuthentication.RedirectFromLoginPage(tbLogin.Text, chkPassword.Checked) Else lblError.Visible = True lblError.Text = "Nombre de usuario y/o contrasea no validos." End If End If End Sub 5
contrasea introducidas. Devolver un true o false si lo encuentra o no en la seccin credentials. En el caso de que la respuesta sea errnea, pintamos el correspondiente mensaje de error en la etiqueta reservada para esto. Si hemos acertado con el usuario y la contrasea entra en juego el mtodo RedirectFromLoginPage, al que le pasamos el usuario y el valor del check para que en el futuro nos pregunte o no por nuestra identificacin. Este nos devolver a la url que hemos intentado acceder dentro de nuestro directorio privado antes de que se nos mostrara la pgina de login. 5.2.- Usuarios en base de datos. Ya hemos vista la forma simple de hacer login con nuestros usuarios en el web.config. Ahora lo podemos complicar un poco ms utilizando la base de datos, si es que tenemos disposicin de hacerlo. Supongamos que tenemos un SQL Server instalado y que tenemos acceso a el. Tendremos que configurar una tabla, donde tengamos un campo login y otro password como mnimo, el resto de campos a eleccin. No explicaremos como crear la tabla y el procedimiento almacenado, que reservado para otro tutorial. Si queris evitar crearlo manualmente, pincha aqu y dentro del zip encontrars el Script SQL que genera la tabla con esta informacin mnima y un procedimiento almacenado para buscar el usuario. Vamos a usar la mismas pgina aspx que en el ejemplo anterior, pero en esta ocasin aadimos un botn ms que nos servir para llamar a una funcin diferente. En esta ocasin necesitaremos importar las siguientes clases para el manejo de base de datos: Imports System.data Imports System.Data.SqlClient Tras pulsar el botn de validar en la Base de datos, se ejecutar el siguiente cdigo: Como se puede observar este cdigo es similar al anterior. IsValid nos valida el que el formulario sea correcto En la siguiente comprobacin se hace una llamada a la funcin, que tendremos que incluir, para realizar la validacin contra la base de datos. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Validacin con usuarios en Base de datos. If IsValid Then If DBAuthenticate(tbLogin.Text, tbPassword.Text)> 0 Then System.Web.Security.FormsAuthentication.RedirectFromLoginPage(tbLogin.Text, chkPassword.Checked) End If End If End Sub 6
La funcin queda como sigue, se ha de prestar atencin a los comentarios para comprender que hace el cdigo: Sin entrar en detalles de manejo de base de datos, la funcin prepara el acceso a la base de datos, y el uso del procedimiento almacenado, le asigna los valores nombre de usuario y contrasea a los parmetros del procedimiento y lo ejecuta. El procedimiento almacenado se encarga de localizar en la tabla en nombre de usuario, y comprobar la password, en caso de ser correctos devuelve el ID correspondiente en la tabla al Function DBAuthenticate(ByVal strUsername As String, ByVal strPassword As String) As Integer Dim conMyData As SqlConnection Dim cmdSelect As SqlCommand Dim parmReturnValue As SqlParameter Dim intresult As Integer
'Conexin a la base de datos conMyData = New SqlConnection(ConfigurationSettings.AppSettings("nevaCnnString")) 'Preparamos la llamada al Procedimiento Almacenado cmdSelect = New SqlCommand("DBAuthenticate", conMyData) cmdSelect.CommandType = CommandType.StoredProcedure
parmReturnValue = cmdSelect.Parameters.Add("RETURN_VALUE", SqlDbType.Int) parmReturnValue.Direction = ParameterDirection.ReturnValue 'Asignamos valores a los parmetros del procedimiento almacenado. cmdSelect.Parameters.Add("@username", strUsername) cmdSelect.Parameters.Add("@password", strPassword)
Try 'Control de errores conMyData.Open() 'Ejecutamos el Procedimiento almacenado cmdSelect.ExecuteNonQuery() 'Recogemos el resultado del Procedimiento almacenado. intresult = cmdSelect.Parameters("RETURN_VALUE").Value 'Cerramos conexin conMyData.Close()
If intresult < 0 Then 'Se ha producido error lblError.Visible = True If intresult = -1 Then 'Nombre de usuario no valido. lblError.Text = "Nombre de usuario no registrado." Else 'intResult = -2 Error en la password lblError.Text = "Password incorrecta." End If End If Return intresult Catch ex As Exception 'Se produce error en el uso del procedimiento lblError.Visible = True lblError.Text = "Error al intentar identificar al usuario: " lblError.Text &= ex.Message End Try End Function 7
registro. Este procedimiento controla dos posibles errores, es simple, si no localiza el nombre de usuario devolver el error -1 y si encuentra el nombre de usuario pero la contrasea no coincide devuelve un -2. Esta misma funcin toma como valor el resultado del procedimiento almacenado por lo que al evaluarla desde la pulsacin del botn, solamente en caso de que el resultado sea mayor a 0 se redirigir al usuario a la pgina o directorio que solicit, de igual modo que suceda con la validacin del usuario configurado en el web.config, mediante el mtodo RedirectFromLoginPage, que espera recibir nuevamente el nombre de usuario y y el resultado del check que nos evitar la insercin de estos datos en el futuro mediante el control de la cookie. 6.- La prueba. Si todo est bien y se han seguido los pasos indicados, nuestro directorio estar protegido contra usuarios annimos. De modo que si llamamos al directorio privado desde le navegador, http://miservidor/privado nos responder la pgina de login que indicamos en el web.config, y tras identificarnos correctamente accederemos a la pgina que habamos solicitado dentro del directorio privado. Con esto ya se puede configurar diferentes herramientas administrativas que gestionen el site, o un lugar donde guardes tus fotos personales y que solo quieres que algunos tenga acceso. 7.- Notas. En la validacin por base de datos, no se ha mencionado ya que ase asume que sabemos acceder a base de datos, pero es necesario configurar en el web.config del raz de la aplicacin la cadena de conexin a la base de datos. Esta cadena de conexin es usada en la lnea conMyData = New SqlConnection(ConfigurationSettings.AppSettings("nevaCnnString")) Cmo decirse entre configurar los usuarios en el Web.config o en la base de datos? Todo depender del nmero de usuarios que se tiene previsto mantener, si queremos mantener de 3 a 10 usuarios, nos decantaremos por la solucin web.config, pero si el nmero es mayor y encima se permitir el crecimiento de usuarios la mejor solucin es la base de datos