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
Se o aplicativo tem um arquivo Web.config na raiz do aplicativo, abra-o.
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>
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>
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>
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>
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>
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
Crie uma página ASP.NET chamada Logon.aspx na pasta raiz do aplicativo.
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
Crie uma página ASP.NET chamada Default.aspx na pasta raiz do aplicativo.
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