Está en la página 1de 7

Cmo implementar la autenticacin basada en formularios en su aplicacin ASP.NET mediante Visual Basic .

NET En este artculo se explica cmo implementar la autenticacin basada en formularios utilizando una base de datos para almacenar a los usuarios. Requisitos En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesitar: Microsoft Visual Studio .NET Microsoft SQL Server Servicios de Microsoft Internet Information Server (IIS) 5.0 o posterior Crear una aplicacin ASP.NET utilizando Visual Basic .NET Abra Visual Studio .NET. Cree una nueva aplicacin Web ASP.NET, y especifique el nombre y la ubicacin. Configurar la seguridad en el archivo Web.config En esta seccin se muestra cmo agregar y modificar las secciones de configuracin <authentication> y <authorization> para configurar la aplicacin ASP.NET de manera que utilice autenticacin basada en formularios. En el Explorador de soluciones, abra el archivo Web.config. Cambie el modo de autenticacin a Forms. Inserte la etiqueta <Forms> y rellene los atributos adecuados. (Para obtener ms informacin acerca de estos atributos, consulte la documentacin de MSDN o la documentacin del Tutorial rpido que se muestra en la seccin REFERENCIAS.) Copie el cdigo siguiente y haga clic en Pegar como HTML en el men Edicin para pegar el cdigo en la seccin <authentication> del archivo: <authentication mode="Forms"> <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" protection="All" path="/" timeout="30" /> </authentication> Deniegue el acceso al usuario annimo en la seccin <authorization> de la manera siguiente: <authorization> <deny users ="?" /> <allow users = "*" /> </authorization> Crear una tabla de base de datos de ejemplo para almacenar detalles de los usuarios En esta seccin se muestra cmo crear una base de datos de ejemplo para almacenar el nombre de usuario, la contrasea y la funcin para los usuarios. Necesitar la

columna de funcin si desea almacenar las funciones de usuario en la base de datos e implementar la seguridad basada en funciones. En el men Inicio de Windows, haga clic en Ejecutar y escriba notepad para abrir el Bloc de notas. Resalte el cdigo de secuencia de comandos SQL siguiente, haga clic con el botn secundario del mouse (ratn) en el mismo y, a continuacin, haga clic en Copiar. En el Bloc de notas, haga clic en Pegar en el men Edicin para pegar el cdigo siguiente: if exists (select * from sysobjects where id = object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Users] GO CREATE TABLE [dbo].[Users] ( [uname] [varchar] (15) NOT NULL , [Pwd] [varchar] (25) NOT NULL , [userRole] [varchar] (25) NOT NULL , ) ON [PRIMARY] GO ALTER TABLE [dbo].[Users] WITH NOCHECK ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED ( [uname] ) ON [PRIMARY] GO INSERT INTO Users values('user1','user1','Manager') INSERT INTO Users values('user2','user2','Admin') INSERT INTO Users values('user3','user3','User') GO Guarde el archivo como Users.sql. En el equipo con Microsoft SQL Server, abra Users.sql en el Analizador de consultas. En la lista de bases de datos, haga clic en pubs y ejecute la secuencia de comandos. Esto crear una tabla de usuarios de ejemplo y llenar la tabla de la base de datos Pubs que se utilizar con esta aplicacin de ejemplo. Crear una pgina Logon.aspx Agregue un nuevo formulario Web Forms al proyecto denominado Logon.aspx. Abra la pgina Logon.aspx en el editor y cambie a la vista HTML. Copie el cdigo siguiente y utilice la opcin Pegar como HTML del men Edicin para insertar el cdigo entre las etiquetas <form>: <h3> <font face="Verdana">Logon Page</font> </h3> <table> <tr>

<td>Email:</td> <td><input id="txtUserName" type="text" runat="server"></td> <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName" Display="Static" ErrorMessage="*" runat="server" ID="vUserName" /></td> </tr> <tr> <td>Password:</td> <td><input id="txtUserPass" type="password" runat="server"></td> <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass" Display="Static" ErrorMessage="*" runat="server" ID="vUserPass" /> </td> </tr> <tr> <td>Persistent Cookie:</td> <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td> <td></td> </tr> </table> <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p> <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" /> Este formulario Web Forms se utiliza para presentar un formulario de inicio de sesin a los usuarios, de manera que puedan proporcionar su nombre de usuario y su contrasea para iniciar sesin en la aplicacin. Cambie a la vista Diseo y guarde la pgina. Codificar el controlador de eventos para que valide las credenciales de usuario En esta seccin se presenta el cdigo que se coloca en la pgina de cdigo subyacente (Logon.aspx.vb). Abra el archivo Logon.aspx.vb. Importe los espacios de nombres necesarios al archivo de cdigo subyacente: Imports System.Data.SqlClient Imports System.Web.Security Cree una funcin ValidateUser para validar las credenciales de usuario examinando la base de datos. (Asegrese de que cambia la cadena de conexin para sealar a su base de datos.) Private Function ValidateUser(ByVal userName As String, ByVal passWord As String) As Boolean Dim conn As SqlConnection Dim cmd As SqlCommand Dim lookupPassword As String

lookupPassword = Nothing ' Check for an invalid userName. ' userName must not be set to nothing and must be between one and 15 characters. If ((userName Is Nothing)) Then System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.") Return False End If If ((userName.Length = 0) Or (userName.Length > 15)) Then System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.") Return False End If ' Check for invalid passWord. ' passWord must not be set to nothing and must be between one and 25 characters. If (passWord Is Nothing) Then System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.") Return False End If If ((passWord.Length = 0) Or (passWord.Length > 25)) Then System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.") Return False End If Try ' Consult with your SQL Server administrator for an appropriate connection ' string to use to connect to your local SQL Server. conn = New SqlConnection("server=localhost;Integrated Security=SSPI;database=pubs") conn.Open() ' Create SqlCommand to select pwd field from the users table given a supplied userName. cmd = New SqlCommand("Select pwd from users where uname=@userName", conn) cmd.Parameters.Add("@userName", SqlDbType.VarChar, 25) cmd.Parameters("@userName").Value = userName

' Execute command and fetch pwd field into lookupPassword string. lookupPassword = cmd.ExecuteScalar() ' Cleanup command and connection objects. cmd.Dispose() conn.Dispose() Catch ex As Exception ' Add error handling here for debugging. ' This error message should not be sent back to the caller. System.Diagnostics.Trace.WriteLine("[ValidateUser] Exception " & ex.Message) End Try ' If no password found, return false. If (lookupPassword Is Nothing) Then ' You could write failed login attempts here to the event log for additional security. Return False End If ' Compare lookupPassword and input passWord by using a case-sensitive comparison. Return (String.Compare(lookupPassword, passWord, False) = 0) End Function Puede utilizar uno de dos mtodos posibles para generar la cookie de autenticacin de formularios y redirigir al usuario a una pgina apropiada en el evento cmdLogin_ServerClick. Se proporciona el cdigo de ejemplo para ambos escenarios. Utilice cualquiera de ellos segn sea necesario. Llame al mtodo RedirectFromLoginPage para generar automticamente la cookie de autenticacin de formularios y redirigir al usuario a una pgina apropiada en el evento cmdLogin_ServerClick: Private Sub cmdLogin_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles cmdLogin.ServerClick If ValidateUser(txtUserName.Value,txtUserPass.value) Then FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, _ chkPersistCookie.Checked) Else Response.Redirect("logon.aspx", True) End If End Sub Genere el vale de autenticacin, cfrelo, cree una cookie, agrguela a la respuesta y redirija al usuario. Esto le ofrece ms control sobre cmo crear la cookie. Tambin

puede incluir datos personalizados junto con FormsAuthenticationTicket en este caso. Private Sub cmdLogin_ServerClick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles cmdLogin.ServerClick If Validateuser(txtUserName.Value,txtUserPass.Value) Then Dim tkt As FormsAuthenticationTicket Dim cookiestr As String Dim ck As HttpCookie tkt = New FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now(), _ dateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data") cookiestr = FormsAuthentication.Encrypt(tkt) ck = new HttpCookie(FormsAuthentication.FormsCookieName(), cookiestr) if (chkPersistCookie.Checked) then ck.Expires=tkt.Expiration ck.Path = FormsAuthentication.FormsCookiePath() Response.Cookies.Add(ck) Dim strRedirect As String strRedirect = Request("ReturnURL") If strRedirect <> "" Then Response.Redirect(strRedirect, True) Else strRedirect = "default.aspx" Response.Redirect(strRedirect, True) End If Else Response.Redirect("logon.aspx", True) End If End Sub Crear una pgina Default.aspx En esta seccin se crea una pgina de prueba a la que se redirige a los usuarios despus de autenticarse. Si los usuarios van a esta pgina sin iniciar sesin primero en la aplicacin, se les redirige a la pgina de inicio de sesin. Cambie el nombre de la pgina WebForm1.aspx existente como Default.aspx y brala en el editor. Cambie a la vista HTML y copie el cdigo siguiente entre las etiquetas <form>: <input type="submit" Value="SignOut" runat="server" id="cmdSignOut"> Este botn se utiliza para cerrar la sesin de autenticacin de formularios. Cambie a la vista Diseo y guarde la pgina. Importe los espacios de nombres necesarios al archivo de cdigo subyacente: Imports System.Web.Security

Abra la pgina de cdigo subyacente (Default.aspx.vb) y copie el cdigo siguiente al controlador de eventos cmdSignOut_ServerClick: Private Sub cmdSignOut_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles cmdSignOut.ServerClick FormsAuthentication.SignOut() Response.Redirect("logon.aspx", True) End Sub Guarde y compile el proyecto. Ahora puede utilizar la aplicacin. Solucin de problemas Quizs desee almacenar las contraseas de manera segura en una base de datos. Puede emplear la funcin de utilidad de la clase FormsAuthentication denominada HashPasswordForStoringInConfigFile para cifrar las contraseas antes de almacenarlas en la base de datos o en el archivo de configuracin. Quizs desee almacenar la informacin de conexin de SQL en el archivo de configuracin (Web.config) de forma que pueda modificarla fcilmente si es necesario. Quizs desee considerar la posibilidad de agregar cdigo para impedir el inicio de sesin de los piratas informticos que intentan utilizar diferentes combinaciones de contraseas. Por ejemplo, puede incluir lgica que slo acepte dos o tres intentos de inicio de sesin. Si el usuario no puede iniciar sesin en un cierto nmero de intentos, quizs desee establecer un indicador en la base de datos para no permitir que ese usuario inicie sesin hasta que no vuelva a habilitar su cuenta visitando una pgina diferente o llamando a su lnea de soporte tcnico. Adems, debe agregar un control de errores apropiado donde sea necesario. Puesto que el usuario se identifica segn la cookie de autenticacin, quizs desee utilizar Capa de sockets seguros (SSL) en esta aplicacin para que nadie pueda recuperar la cookie de autenticacin ni cualquier otra informacin valiosa que se transmita. La autenticacin basada en formularios requiere que su cliente acepte o habilite las cookies en su explorador. El parmetro timeout de la seccin de configuracin <authentication> controla el intervalo en el que se vuelve a generar la cookie de autenticacin. Puede elegir un valor que proporcione mejor rendimiento y seguridad. Algunos servidores proxy y memorias cach intermedios de Internet pueden almacenar en cach respuestas del servidor Web que contienen encabezados SetCookie, que se devuelven a un usuario diferente. Puesto que la autenticacin basada en formularios utiliza una cookie para autenticar a los usuarios, esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro usuario recibiendo una cookie de un servidor proxy o una memoria cach intermedios que no estaba dirigida originalmente a ellos.

También podría gustarte