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

Cambiar vista:
Sin script
.NET Framework 4 - ASP.NET
Cómo: Implementar la autenticación de formularios simple
Este artículo se tradujo de forma manual. Para mostrar esta página y el contenido original en inglés al mismo tiempo, cambie a Lightweight según sus preferencias de visualización.

En el ejemplo de este tema se presenta una sencilla implementación de la autenticación mediante formularios de ASP.NET. Se ilustran los principios básicos sobre el uso de la autenticación mediante formularios para registrar usuarios en una aplicación ASP.NET.

NotaNota

Una forma útil de trabajar con la autenticación mediante formularios es utilizar la pertenencia y los controles de inicio de sesión de ASP.NET. La pertenencia a 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 pertenencia a ASP.NET y encapsulan la lógica requerida para solicitar credenciales a los usuarios, validarlos, recuperar o reemplazar contraseñas, etc. Efectivamente, la pertenencia 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 pertenencia 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, que es una página denominada Default.aspx. Solo un usuario tiene acceso al recurso protegido: jchen@contoso.com, cuya contraseña es "37Yj*99P". El nombre de usuario y la contraseña están incluidos en el código del archivo Logon.aspx. El ejemplo necesita 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.

Hay disponible un proyecto de Visual Studio con código fuente para complementar este tema: Download.

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="http://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 usar para la redirección 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 si previamente no se han autenticado, se les redirige a una página denominada Logon.aspx. Especificó este nombre de archivo 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.

Nota de seguridad Nota sobre la seguridad

En este ejemplo hay un cuadro de texto que acepta datos del usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, las páginas web ASP.NET validan los datos escritos por el usuario para comprobar que no incluyen script ni elementos HTML. Para obtener más información, vea Información general sobre los ataques mediante scripts.

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:

    Visual Basic
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script runat="server">
      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" runat="server">
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail" runat="server" /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                runat="server" />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist" runat="server" /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"  
           runat="server" />
        <p>
          <asp:Label ID="Msg" ForeColor="red" runat="server" />
        </p>
      </form>
    </body>
    </html>
    

    C#
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script runat="server">
      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" runat="server">
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail" runat="server" /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                 runat="server" />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist" runat="server" /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On" 
           runat="server" />
        <p>
          <asp:Label ID="Msg" ForeColor="red" runat="server" />
        </p>
      </form>
    </body>
    </html>
    

    La página contiene controles de servidor ASP.NET que recogen información sobre el usuario y una casilla 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 varios caracteres no alfabéticos y que tiene al menos ocho caracteres de longitud.) Si las credenciales del usuario son correctas, el código llama al método RedirectFromLoginPage de la clase FormsAuthentication, pasando el nombre del usuario y un valor booleano (derivado de la casilla) que indica si se va conservar o no un 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 de 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:

    Visual Basic
    <%@ Page Language="VB" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script runat="server">
      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" runat="server" />
      <form id="Form1" runat="server">
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out" runat="server" /><p>
      </form>
    </body>
    </html>
    

    C#
    <%@ Page Language="C#" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script runat="server">
      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" runat="server" />
      <form id="Form1" runat="server">
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out" runat="server" /><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

Referencia

Conceptos

Otros recursos