Cómo: Implementar la autenticación de formularios simple

Actualización: noviembre 2007

El ejemplo de este tema presenta una implementación simple de la autenticación mediante formularios de ASP.NET. Está diseñada para mostrar los principios de cómo utilizar la autenticación mediante formularios para registrar a los usuarios en una aplicación ASP.NET.

Nota:

Una forma útil de trabajar con la autenticación mediante formularios es utilizar la suscripción y los controles de inicio de sesión de ASP.NET. La suscripción de ASP.NET proporciona un medio para almacenar y administrar la información de los usuarios e incluye métodos para su autenticación. Los controles de inicio de sesión de ASP.NET funcionan con la suscripción de ASP.NET y encapsulan la lógica requerida para solicitar credenciales a los usuarios, validarlos, recuperar o reemplazar contraseñas, etc. Efectivamente, la suscripción y los controles de inicio de sesión de ASP.NET proporcionan una capa de abstracción en la autenticación mediante formularios y reemplazan la mayor parte del trabajo que tendría que llevarse a cabo normalmente para utilizar dicha autenticación. Para obtener más información, vea Administrar usuarios mediante suscripciones y Información general sobre controles de inicio de sesión de ASP.NET.

En el escenario del ejemplo los usuarios solicitan un recurso protegido, concretamente una página denominada Default.aspx. Solamente un usuario tiene acceso al recurso protegido: jchen@contoso.com, con la contraseña "37Yj*99P". El nombre de usuario y la contraseña están incluidos en el código del archivo Logon.aspx. El ejemplo requiere tres archivos: el archivo Web.config, una página denominada Logon.aspx, y una página denominada Default.aspx. Los archivos residen en el directorio raíz de la aplicación.

Para configurar la aplicación para la autenticación mediante formularios

  1. Si la aplicación tiene un archivo Web.config en la raíz de la aplicación, ábralo.

  2. Si la aplicación todavía no tiene un archivo Web.config en la carpeta raíz de la aplicación, cree un archivo de texto denominado Web.config y agregue los siguientes elementos:

    <?xml version="1.0"?>
    <configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0">
        <system.web>
    
        </system.web>
    </configuration>
    
  3. Dentro del elemento system.web, cree un elemento authentication y establezca su atributo mode en Forms, como se muestra en el ejemplo siguiente:

    <system.web>
      <authentication mode="Forms">  </authentication>
    </system.web>
    
  4. Dentro del elemento authentication, cree un elemento forms y establezca los atributos siguientes:

    • loginUrl   Establezca este atributo en "Logon.aspx". Logon.aspx es la dirección URL que se debe utilizar para el redireccionamiento si ASP.NET no encuentra una cookie de autenticación con la solicitud.

    • name   Establezca este atributo en ".ASPXFORMSAUTH". De este modo se establece el sufijo del nombre de la cookie que contiene el vale de autenticación.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">    </forms>
      </authentication>
    </system.web>
    
  5. Dentro del elemento system.web, cree un elemento authorization.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>  </authorization>
    </system.web>
    
  6. Dentro del elemento authorization, cree un elemento deny y establezca su atributo users en "?". Esto especifica que los usuarios no autenticados (representados por "?") no tienen acceso a los recursos de esta aplicación.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
    
  7. Guarde el archivo Web.config y ciérrelo.

Crear la página de inicio de sesión

Cuando los usuarios solicitan cualquier página del sitio Web y no se han autenticado previamente, son redirigidos a una página denominada Logon.aspx. Este nombre de archivo ya se ha especificado anteriormente en el archivo Web.config.

La página Logon.aspx recoge las credenciales del usuario (dirección de correo electrónico y contraseña) y las autentica. Si el usuario es autenticado correctamente, la página de inicio de sesión le redirige a la página solicitada originalmente. En el ejemplo, las credenciales válidas están incluidas en el código de la página.

Para crear la página de inicio de sesión

  1. Cree una página ASP.NET denominada Logon.aspx en la carpeta raíz de la aplicación.

  2. Copie el marcado siguiente y codifique en él:

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script >
      Sub Logon_Click(ByVal sender As Object, ByVal e As EventArgs)
        If ((UserEmail.Text = "jchen@contoso.com") And _
                (UserPass.Text = "37Yj*99Ps")) Then
          FormsAuthentication.RedirectFromLoginPage _
               (UserEmail.Text, Persist.Checked)
        Else
          Msg.Text = "Invalid credentials. Please try again."
        End If
      End Sub
    </script>
    
    <html>
    <head id="Head1" >
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" >
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail"  /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                 />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                 />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                 />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist"  /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"  
            />
        <p>
          <asp:Label ID="Msg" ForeColor="red"  />
        </p>
      </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script >
      void Logon_Click(object sender, EventArgs e)
      {
        if ((UserEmail.Text == "jchen@contoso.com") && 
                (UserPass.Text == "37Yj*99Ps"))
          {
              FormsAuthentication.RedirectFromLoginPage 
                 (UserEmail.Text, Persist.Checked);
          }
          else
          {
              Msg.Text = "Invalid credentials. Please try again.";
          }
      }
    </script>
    <html>
    <head id="Head1" >
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" >
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail"  /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                 />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                  />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                 />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist"  /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On" 
            />
        <p>
          <asp:Label ID="Msg" ForeColor="red"  />
        </p>
      </form>
    </body>
    </html>
    

    La página contiene controles de servidor ASP.NET que recogen información sobre el usuario y una casilla de verificación en la que los usuarios pueden hacer clic para conservar sus credenciales de inicio de sesión. El controlador de Click del botón Iniciar sesión contiene código que comprueba la dirección de correo electrónico y la contraseña del usuario utilizando como referencia los valores incluidos en el código. (La contraseña es una contraseña segura que contiene al menos ocho caracteres e incluye varios caracteres no alfabéticos). Si las credenciales del usuario son correctas, el código llama al método RedirectFromLoginPage de la clase FormsAuthentication, y le pasa el nombre de usuario y un valor booleano (derivado de la casilla de verificación) que indican si se ha de conservar el vale de autenticación como una cookie. El método redirige al usuario a la página solicitada originalmente. Si las credenciales del usuario no coinciden, se muestra un mensaje de error. Observe que la página importa el espacio de nombres System.Web.Security, que contiene la clase FormsAuthentication.

Crear la página predeterminada

Para el ejemplo, creará una página ASP.NET en la carpeta raíz de la aplicación. Como especificó en el archivo de configuración que se negaría a todos los usuarios no autenticados el acceso a los recursos de ASP.NET de la aplicación (incluidos los archivos .aspx, pero no los archivos estáticos como los archivos HTML o los archivos multimedia con imágenes, música etc.), cuando un usuario solicite la página, la autenticación mediante formularios comprobará sus credenciales y, si es necesario, le redirigirá a la página de inicio de sesión. La página que cree también permitirá a los usuarios cerrar la sesión, borrando su vale de autenticación almacenado (cookie).

Para crear una página predeterminada

  1. Cree una página ASP.NET denominada Default.aspx en la carpeta raíz de la aplicación.

  2. Copie el marcado siguiente y codifique en él:

    <%@ Page Language="VB" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script >
      Sub Page_Load(ByVal Src As Object, ByVal e As EventArgs)
        Welcome.Text = "Hello, " & Context.User.Identity.Name
      End Sub
    
      Sub Signout_Click(ByVal sender As Object, ByVal e As EventArgs)
        FormsAuthentication.SignOut()
        Response.Redirect("Logon.aspx")
      End Sub
    </script>
    
    <body>
      <h3>
        Using Forms Authentication</h3>
      <asp:Label ID="Welcome"  />
      <form id="Form1" >
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out"  /><p>
      </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script >
      void Page_Load(object sender, EventArgs e)
      {
        Welcome.Text = "Hello, " + Context.User.Identity.Name;
      }
    
      void Signout_Click(object sender, EventArgs e)
      {
        FormsAuthentication.SignOut();
        Response.Redirect("Logon.aspx");
      }
    </script>
    
    <body>
      <h3>
        Using Forms Authentication</h3>
      <asp:Label ID="Welcome"  />
      <form id="Form1" >
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out"  /><p>
      </form>
    </body>
    </html>
    

    La página muestra la identidad autenticada del usuario, establecida por la clase FormsAuthentication y disponible en una página ASP.NET como propiedad Context.User.Identity.Name. El controlador de Click del botón Cerrar sesión contiene código que llama al método SignOut para borrar la identidad del usuario y quitar el vale de autenticación (cookie). A continuación, redirige al usuario a la página de inicio de sesión.

Vea también

Conceptos

Procedimientos de seguridad básicos para aplicaciones Web

Referencia

Información general sobre controles de inicio de sesión de ASP.NET

Otros recursos

Seguridad de aplicaciones Web ASP.NET

Administrar usuarios mediante suscripciones