Autenticación sencilla mediante formularios

En este ejemplo se muestra la implementación más sencilla posible de la autenticación mediante formularios de ASP.NET. Con este ejemplo se pretende ilustrar los fundamentos básicos para crear una aplicación ASP.NET que utilice la autenticación mediante formularios. Para obtener un ejemplo más complejo de la autenticación mediante formularios que utiliza un archivo XML para contener los nombres de usuario y las contraseñas, vea Autenticación de formularios mediante un archivo de usuarios XML.

En este escenario, el cliente solicita un recurso protegido denominado Default.aspx. Hay sólo un usuario que puede obtener acceso al recurso protegido: jchen@contoso.com, con la contraseña password. El nombre de usuario y la contraseña están incluidos en el código del archivo Logon.aspx. Hay tres archivos implicados: Web.config, Logon.aspx y Default.aspx. Los archivos residen en el directorio raíz de la aplicación. El código de estos archivos se analiza a continuación.

Web.config

El archivo de configuración Web.config se debe configurar con las siguientes entradas y colocarlo en el directorio raíz de la aplicación (el directorio en el que se encuentra el archivo Default.aspx).

<configuration>
    <system.web>

Para configurar el archivo de configuración Web.config

  1. Establezca el modo de autenticación en Forms. Otros valores posibles son: Windows, Passport y None (cadena vacía). En este ejemplo, el valor debe ser Forms.

            <authentication mode="Forms"> 
    
  2. Establezca los atributos de autenticación mediante formularios.

                <forms
    
    1. Establezca el atributo loginUrl en "logon.aspx". Logon.aspx es la dirección URL que se utiliza para la redirección si ASP.NET no encuentra una cookie de autenticación con la solicitud.

                  loginUrl = "logon.aspx"
      
    2. Establezca el sufijo del nombre de la cookie.

                  name = ".ASPXFORMSAUTH"/>
      
  3. Niegue el acceso a este directorio a los usuarios no autenticados.

            </authentication>
            <authorization>
                <deny users="?"/> 
            </authorization>
        </system.web>
    </configuration>
    

Logon.aspx

Logon.aspx es el archivo al que se redirige la solicitud si ASP.NET no encuentra el vale de autenticación con la solicitud. Este nombre está especificado en el archivo de configuración Web.config. Se presenta al usuario cliente un formulario que contiene dos cuadros de texto (User E-mail Name y Password) así como un botón Submit. El usuario escribe el nombre de correo electrónico y la contraseña, y hace clic en el botón Submit. A continuación, el código compara el nombre y la contraseña con el par incluido en el código dentro de la instrucción if. Si la comparación es correcta, el usuario se conecta a Default.aspx. En caso contrario, se presenta un mensaje de error al usuario.

Para implementar la funcionalidad de inicio de sesión

  1. Importe los espacios de nombres necesarios.

    <%@ Import Namespace="System.Web.Security" %>
    
  2. Configure el lenguaje de secuencias de comandos.

        <script language="VB" runat=server>
    [C#]
        <script language="C#" runat=server>
    
  3. Cree un controlador de eventos Logon_Click para controlar el evento de envío.

            Sub Logon_Click(sender As Object, e As EventArgs)
    [C#]
            void Logon_Click(Object sender, EventArgs e) 
            {
    
  4. Autentique al usuario comparando el nombre y la contraseña de la entrada con los incluidos en el código: jchen@contoso.com y password. Si la comparación es correcta, redirija la solicitud al recurso protegido (Default.aspx). Si se produce un error en la comparación, muestre un mensaje de error.

                If ((UserEmail.Value = "jchen@contoso.com") And _
                        (UserPass.Value = "password")) Then
                    FormsAuthentication.RedirectFromLoginPage _
                        (UserEmail.Value, Persist.Checked)
                Else
                    Msg.Text = "Invalid Credentials: Please try again."
                End If
            End Sub
        </script>
    [C#]
                if ((UserEmail.Value == "jchen@contoso.com") && 
                    (UserPass.Value == "password")) 
                {
                   FormsAuthentication.RedirectFromLoginPage
                       (UserEmail.Value, Persist.Checked);
                }
                else 
                {
                    Msg.Text = "Invalid Credentials: Please try again.";
                }
            }
        </script>
    
  5. Muestre un formulario para recopilar la información de inicio de sesión.

    <body>
    <form runat=server>
        <h3><font face="Verdana">Logon Page</font></h3>
        <table>
            <tr>
    
    1. Genere un cuadro de texto User E-mail Name. Agregue un control de validación de campo requerido y un control de validación de expresión regular que compruebe si hay una entrada válida de correo electrónico.

              <td>Email:</td>
              <td><input id="UserEmail" type="text" runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserEmail" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
              <td><asp:RegularExpressionValidator id="RegexValidator" 
                       ControlToValidate="UserEmail"
                       ValidationExpression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
                       EnableClientScript="false"
                       Display="Static"
                       ErrorMessage="Invalid format for e-mail address."
                       runat="server"/>
              </td>
          </tr>
          <tr>    
      
    2. Genere un cuadro de texto Password.

              <td>Password:</td>
              <td><input id="UserPass" type=password runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserPass" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
          </tr>
          <tr>
      
    3. Cree una casilla de verificación Persistent Cookie. Si se activa la casilla Persistent Cookie, la cookie será válida entre las sesiones del explorador. En caso contrario, la cookie se destruirá cuando se cierre el explorador.

              <td>Persistent Cookie:</td>
              <td><ASP:CheckBox id=Persist runat="server"
                       autopostback="true"/>
              </td>
              <td></td>
          </tr>
      </table>
      
      
    4. Cree un botón Submit que active el evento Logon_Click cuando se devuelve el formulario.

      <input type="submit" OnServerClick="Logon_Click" Value="Logon" 
              runat="server"/>
      <p><asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" 
                  Font-Size="10" runat=server/></p>
      
    </form>
    </body>
    </html>
    

Default.aspx

El archivo Default.aspx es el recurso protegido que se solicita. Default.aspx es un archivo sencillo que simplemente muestra la cadena Hello, además del nombre de correo electrónico registrado y un botón Signout.

<%@ Page LANGUAGE="VB" %>
<html>
<head>
<title>Forms Authentication</title>

<script runat=server>
    Sub Page_Load(Src As Object, e As EventArgs) 
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name
    End Sub
    Sub Signout_Click(sender As Object, e As EventArgs) 
        FormsAuthentication.SignOut()
        Response.Redirect("logon.aspx")
    End Sub
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                     
           runat="server"/><p>
</form>
</body>
</html>
[C#]
<%@ Page LANGUAGE="C#" %>
<html>
<head>
<title>Forms Authentication</title>
<script runat=server>
    private void Page_Load(Object Src, EventArgs e ) 
    {
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name;
    }
    private void Signout_Click(Object sender, EventArgs e) 
    {
        FormsAuthentication.SignOut();
        Response.Redirect("logon.aspx");
    }
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                    
           runat="server"/><p>
</form>
</body>
</html>

Vea también

Seguridad ASP.NET de aplicaciones Web | Diseñar aplicaciones ASP.NET seguras | Autenticación de formularios mediante un archivo de usuarios XML