Compartilhar via


Como: Implementar autenticação de formulários simples

Este exemplo neste tópico apresenta uma implementação simples de autenticação de formulários do ASP.NET.Ele é destinado a ilustrar os fundamentos de como usar a autenticação de formulários para fazer logon usuários em um aplicativo ASP.NET.

Observação:

Uma maneira conveniente para trabalhar com a autenticação de formulários é usar associação do ASP.NET e controles do ASP.NET de logon.Associação do ASP.NET fornece uma maneira para armazenar e gerenciar informações do usuário e inclui métodos para autenticar usuários.Controles do ASP.NET de logon funcionam com associação do ASP.NET e encapsulam a lógica necessária para solicitar aviso a usuários de credenciais, validar os usuários, recuperar ou substituir as senhas e assim por diante.Na verdade, associação do ASP.NET e controles do ASP.NET de logon fornecem uma camada de abstração sobre a autenticação de formulários e substituição da maioria ou de todo o trabalho que você normalmente teria que fazer para usar a autenticação de formulários.Para obter mais informações, consulte Gerenciando usuários usando Associação e Visão Geral sobre Controles de Login ASP.NET.

No cenário de exemplo, os usuários solicitação um recurso protegido, ou seja, uma página chamada padrão.aspx.Somente um usuário tem acesso ao recurso protegido: jchen@Contoso.com, com a senha "37Yj * 99 P".O nome de usuário e a senha estão embutidas no arquivo Logon.aspx.O exemplo requer três arquivos: o arquivo Web.config, uma página chamada logon.aspx e uma página chamada padrão.aspx.Os arquivos residem no diretório raiz do aplicativo.

Para configurar o aplicativo para autenticação de formulários

  1. Se o aplicativo tem um arquivo Web.config na raiz do aplicativo, abra-o.

  2. Se o aplicativo ainda não tiver um arquivo Web.config na pasta raiz do aplicativo, crie um arquivo de texto denominado Web.config e adicione os seguintes elementos a ele:

    <?xml version="1.0"?>
    <configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0">
        <system.web>
    
        </system.web>
    </configuration>
    
  3. Dentro do elemento system.web, crie um elemento authentication e defina o atributo mode para Forms,conforme mostrado no exemplo o seguir:

    <system.web>
      <authentication mode="Forms">  </authentication>
    </system.web>
    
  4. Dentro do elemento authentication, crie um elemento forms e defina os seguintes atributos:

    • loginUrl   Definido como "Logon.aspx" Logon.aspx. é a URL a ser usado para redirecionamento se ASP.NET não encontrar um cookie de autenticação com a solicitação.

    • name  Definido como ".ASPXFORMSAUTH".Isso define o sufixo para o nome do cookie que contenha a permissão de autenticação.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">    </forms>
      </authentication>
    </system.web>
    
  5. Dentro do elemento system.web, declare um elemento authorization.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>  </authorization>
    </system.web>
    
  6. Dentro do elemento authorization, crie um elemento deny e defina o atributo users como "? ".Isso especifica que os usuários não autenticados (representados por "? ") têm acesso negado aos recursos neste aplicativo.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
    
  7. Salve o arquivo Web.config e feche-o.

Criando a página de logon

Quando os usuários solicitam qualquer página do site e se eles anteriormente não tiverem sido autenticados, eles são redirecionados para uma página chamada logon.aspx.Você especificou este nome de arquivo anteriormente na Web. arquivo de configuração.

A página Logon.aspx reúne as credenciais do usuário (endereço de email e senha) e autentica-os.Se o usuário é autenticado com êxito, a página de logon redireciona o usuário para a página originalmente solicitada.No exemplo, as credenciais válidas são embutidas em código de página.

Observação de segurança:

Este exemplo contém uma caixa de texto que aceita entradas de usuário, o que é uma ameaça potencial à segurança.Por padrão, páginas Web ASP.NET validam se as entradas de usuário não incluem scripts ou elementos HTML.Para obter mais informações, consulte Visão Geral de Scripts Maliciosos.

Para criar a página de logon

  1. Crie uma página ASP.NET chamada Logon.aspx na pasta raiz do aplicativo.

  2. Copie a seguinte marcação e código para ela:

    <%@ 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>
    

    A página contém controles que coletam informações do usuário e uma caixa de seleção que os usuários podem clicar para tornar persistente suas credenciais de logon de servidor ASP.NET.O botão Log On do manipulador Click contém código que verifica o endereço de email e senha do usuário em relação aos valores embutidos.(A senha é uma senha forte que contém vários caracteres não alfabéticos e tem pelo menos oito caracteres.) Se sistema autônomo credenciais do usuário estão corretas, o código chama o FormsAuthentication da classe RedirectFromLoginPage método, passando o nome do usuário e um valor booliano (derivada da caixa de seleção) que indica se deve persistir um tíquete de autenticação sistema autônomo um cookie. O método redireciona o usuário para a página originalmente solicitada.Se as credenciais do usuário não coincidirem, um mensagem de erro será exibida.Observe que a página importa o namespace System.Web.Security, que contém a classe FormsAuthentication.

Criando a página padrão

Para o exemplo, você criará um página ASP.NET na pasta raiz do aplicativo.Devido a você ter especificado no arquivo de configuração que todos os usuários não autenticados têm acesso negado aos recursos ASP.NET do aplicativo (que inclui arquivos .aspx; mas não inclui arquivos estáticos, como arquivos HTML ou arquivos de multimídia incluindo imagens, músicas e assim por diante), quando um usuário solicita a página, a autenticação de formulários irá verificar as credenciais do usuário e redirecionar o usuário para a página de logon, se necessário.A página que você criar também permitirá que os usuários façam logout, o que limpa sua permissão de autenticação persistente (cookie).

Para criar uma página padrão

  1. Crie uma página ASP.NET chamada Default.aspx na pasta raiz do aplicativo.

  2. Copie a seguinte marcação e código para ela:

    <%@ 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>
    

    A página exibe a identidade autenticada do usuário, que foi definida pela classe FormsAuthentication e está disponível em um página ASP.NET como a propriedade Context.User.Identity.Name.O Botão Sign Out do manipulador Click contém código que chama o método SignOut para limpar a identidade do usuário e remover a permissão de autenticação (cookies).Ele então redireciona o usuário para a página de logon.

Consulte também

Conceitos

Práticas de segurança básica para aplicativos da Web

Referência

Visão Geral sobre Controles de Login ASP.NET

Outros recursos

Segurança de aplicativos da Web ASP.NET

Gerenciando usuários usando Associação