Como implementar autenticação baseada em formulários em seu aplicativo ASP.NET usando C# #.NET

Traduções de Artigos Traduções de Artigos
Artigo: 301240 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como implementar baseada em formulários autenticação por meio de um banco de dados para armazenar os usuários.

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft Visual Studio .NET
  • Serviços de Informações da Internet da Microsoft (IIS) versão 5.0 ou posterior
  • Microsoft SQL Server

Criar um aplicativo ASP.NET usando C# .NET

  1. Abra o Visual Studio .NET.
  2. Criar um novo aplicativo Web do ASP.NET e especifique o nome e a localização.

Configurar as configurações de segurança no arquivo Web. config

Esta seção demonstra como adicionar e modificar o <authentication></authentication> e <authorization></authorization> seções de configuração para configurar o aplicativo ASP.NET para Use a autenticação baseada em formulários.
  1. No Solution Explorer, abra o arquivo Web. config.
  2. Altere o modo de autenticação para Forms.
  3. Insira a marca de <Forms>e preencher o apropriado atributos. (Para obter mais informações sobre esses atributos, consulte o MSDN documentação ou a documentação QuickStart listada a </Forms>REFERÊNCIAS seção). Cópia do código a seguir e, em seguida, clique Colar como HTML sobre oEditar menu para colar o código do <authentication></authentication> seção do arquivo:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Negar acesso para o usuário anônimo na <authorization></authorization> seção da seguinte maneira:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Criar uma tabela de banco de dados de exemplo para armazenar detalhes do usuário

Esta seção demonstra como criar um banco de dados de exemplo para armazene o nome de usuário, senha e função para os usuários. Você precisa de coluna função Se você quiser armazenar funções de usuário no banco de dados e implementar baseada em função segurança.
  1. Sobre o Iniciar menu, clique emExecutare, em seguida, digite bloco de notas Para abrir Bloco de notas.
  2. Destaque o seguinte código de script SQL, com o botão direito do código e em seguida, clique Copiar. No bloco de notas, clique emColar sobre o Editar menu para colar o seguinte código:
    if exists (select * from sysobjects where id = 
    object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Users]
    GO
    CREATE TABLE [dbo].[Users] (
       [uname] [varchar] (15) NOT NULL ,
       [Pwd] [varchar] (25) NOT NULL ,
       [userRole] [varchar] (25) NOT NULL ,
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Users] WITH NOCHECK ADD 
       CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED 
       (
          [uname]
       )  ON [PRIMARY] 
    GO
    
    INSERT INTO Users values('user1','user1','Manager')
    INSERT INTO Users values('user2','user2','Admin')
    INSERT INTO Users values('user3','user3','User')
    GO
    					
  3. Salve o arquivo como Users.
  4. No computador do Microsoft SQL Server, abra Users em Analisador de consultas. Na lista de bancos de dados, clique em Pubs, e Execute o script. Isso cria uma tabela de usuários de exemplo e preenche a tabela no o banco de dados Pubs para ser usado com este aplicativo de exemplo.

Criar uma página aspx

  1. Adicionar um novo formulário da Web ao projeto chamado. Aspx.
  2. Abra a página logon. aspx no editor e alterne para HTML modo de exibição.
  3. Copie o código a seguir e use o Colar como HTML a opção sobre a Editar menu para inserir o código entre o<form>marcas: </form>
    <h3>
       <font face="Verdana">Logon Page</font>
    </h3>
    <table>
       <tr>
          <td>Email:</td>
          <td><input id="txtUserName" type="text" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
               Display="Static" ErrorMessage="*" runat="server" 
               ID="vUserName" /></td>
       </tr>
       <tr>
          <td>Password:</td>
          <td><input id="txtUserPass" type="password" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
              Display="Static" ErrorMessage="*" runat="server" 
              ID="vUserPass" />
          </td>
       </tr>
       <tr>
          <td>Persistent Cookie:</td>
          <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
          <td></td>
       </tr>
    </table>
    <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
    <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />
    						
    Este formulário da Web é usado para apresentar um formulário de logon aos usuários para que eles possam Forneça seu nome de usuário e senha para fazer logon para o aplicativo.
  4. Alterne para modo Design e salve a página.

Codifique o manipulador de eventos, de modo que ele valide as credenciais do usuário

Esta seção apresenta o código que é colocado no code-behind página (Logon.aspx.cs).
  1. Clique duas vezes em Logon Para abrir o Arquivo logon.aspx.cs.
  2. Importe os namespaces necessários no arquivo code-behind:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Crie uma função ValidateUser para validar as credenciais do usuário através das banco de dados. (Certifique-se de que você altere a seqüência de conexão para apontar para o banco de dados).
    private bool ValidateUser( string userName, string passWord )
    {
    	SqlConnection conn;
    	SqlCommand cmd;
    	string lookupPassword = null;
    
    	// Check for invalid userName.
    	// userName must not be null and must be between 1 and 15 characters.
    	if ( (  null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
    		return false;
    	}
    
    	// Check for invalid passWord.
    	// passWord must not be null and must be between 1 and 25 characters.
    	if ( (  null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
    		return false;
    	}
    
    	try
    	{
    		// Consult with your SQL Server administrator for an appropriate connection
    		// string to use to connect to your local SQL Server.
    		conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
    		conn.Open();
    
    		// Create SqlCommand to select pwd field from users table given supplied userName.
    		cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
    		cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
    		cmd.Parameters["@userName"].Value = userName;
    
    		// Execute command and fetch pwd field into lookupPassword string.
    		lookupPassword = (string) cmd.ExecuteScalar();
    
    		// Cleanup command and connection objects.
    		cmd.Dispose();
    		conn.Dispose();
    	}
    	catch ( Exception ex )
    	{
    		// Add error handling here for debugging.
    		// This error message should not be sent back to the caller.
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
    	}
    
    	// If no password found, return false.
    	if ( null == lookupPassword ) 
    	{
    		// You could write failed login attempts here to event log for additional security.
    		return false;
    	}
    
    	// Compare lookupPassword and input passWord, using a case-sensitive comparison.
    	return ( 0 == string.Compare( lookupPassword, passWord, false ) );
    
    }
    					
  4. Você pode usar um dos dois métodos para gerar os formulários cookie de autenticação e redirecionar o usuário para uma página apropriada no evento cmdLogin_ServerClick . Código de exemplo é fornecido para os dois cenários. Use um dos -los de acordo com sua necessidade.
    • Chame o método RedirectFromLoginPage para gerar automaticamente o cookie de autenticação de formulários e redirecionar o usuário para uma página apropriada no evento cmdLogin_ServerClick :
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
      if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
      	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
      		chkPersistCookie.Checked);
      	else
      		Response.Redirect("logon.aspx", true);
      }
      						
    • Gerar o tíquete de autenticação, criptografá-lo, criar um cookie, adicione-o à resposta e redirecione o usuário. Isso lhe oferece mais controlar como criar o cookie. Você também pode incluir dados personalizados ao longo com o FormsAuthenticationTicket neste caso.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
         if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
         {
            FormsAuthenticationTicket tkt;
            string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
      DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            if (chkPersistCookie.Checked)
            ck.Expires=tkt.Expiration;	
      		    ck.Path = FormsAuthentication.FormsCookiePath; 
            Response.Cookies.Add(ck);
      
            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if (strRedirect==null)
                  strRedirect = "default.aspx";
               Response.Redirect(strRedirect, true);
         }
         else
            Response.Redirect("logon.aspx", true);
      }
      						
  5. Certifique-se de que o código a seguir é adicionado ao método InitializeComponent no código que gera o Designer de formulário da Web:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Criar uma página default. aspx

Esta seção cria uma página de teste para que os usuários são redirecionados Após a autenticação. Se os usuários navegam até essa página sem primeiro fazer logon para o aplicativo, eles são redirecionados para a página de logon.
  1. Renomear a página WebForm1 existente como default. aspx, e abri-lo no editor.
  2. Alterne para modo de exibição HTML e copie o seguinte código entre o<form>marcas: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Este botão é usado para fazer logoff a autenticação de formulários sessão.
  3. Alterne para modo Design e salve a página.
  4. Importe os namespaces necessários no arquivo code-behind:
    using System.Web.Security;
    					
  5. Clique duas vezes em SignOut para abrir o code-behind de página (Default.aspx.cs) e copiar o código a seguir no manipulador de eventos cmdSignOut_ServerClick :
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Certifique-se de que o código a seguir é adicionado ao método InitializeComponent no código que gera o Designer de formulário da Web:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Salve e compile o projeto. Agora você pode usar o aplicativo.

Notas adicionais

  • Talvez você queira armazenar senhas com segurança em um banco de dados. Você pode usar a função de utilitário de classe FormsAuthentication chamada HashPasswordForStoringInConfigFile para criptografar as senhas antes de armazená-los no banco de dados ou arquivo de configuração.
  • Você pode querer armazenar as informações de conexão SQL no arquivo de configuração (Web. config), de modo que você pode modificá-lo facilmente se necessário.
  • Você pode considerar a inclusão de código para impedir que hackers que tentam Use combinações diferentes de senhas de logon. Por exemplo, você pode inclua lógica que aceite apenas duas ou três tentativas de logon. Se o usuário não pode Faça logon em um determinado número de tentativas, você talvez queira definir um sinalizador banco de dados para não permitir que o usuário fazer logon até que reative sua conta visitando uma página diferente ou ligando para sua linha de suporte. Em adição, você deve adicionar erro apropriado tratamento onde quer que necessário.
  • Como o usuário é identificado com base na autenticação cookie, você talvez queira usar Secure Sockets Layer (SSL) nesse aplicativo tão que ninguém possa enganar o cookie de autenticação e quaisquer outros valiosos informações que estão sendo transmitidas.
  • A autenticação baseada em formulários requer que seu cliente aceite ou habilite cookies em seu navegador.
  • O parâmetro de tempo limite do <authentication></authentication> seção de configuração controla o intervalo no qual o cookie de autenticação é regenerado. Você pode escolher um valor que fornece melhor desempenho e segurança.
  • Determinados proxies e caches intermediários na Internet pode armazenar em cache respostas do servidor da Web que contêm cabeçalhos Set-Cookie, que são, em seguida retornado para um usuário diferente. Porque a autenticação baseada em formulários usa um cookie para autenticar usuários, isso pode causar aos usuários acidentalmente (ou intencionalmente) representar outro usuário, recebendo um cookie de um proxy intermediários ou cache não foi destinado originalmente para eles.

Referências

Para obter mais informações sobre como implementar simples autenticação baseada em formulários que usa o <credentials></credentials> seção para armazenar usuários e senhas, consulte os seguintes itens Exemplo GotDotNet ASP.NET QuickStart:
Autenticação baseada em formulários
http://QuickStarts.ASP.NET/QuickStartv20/ASPNET/doc/Security/FormsAuth.aspx
Para obter mais informações sobre como implementar baseada em formulários autenticação que usa um arquivo XML para armazenar usuários e senhas, consulte o tópico a seguir no.NET Framework Software Development Kit (SDK) documentação:
Autenticação de formulários usando um arquivo de usuários XML
http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71). aspx
Para obter mais informações sobre a segurança de aplicativo da Web ASP.NET, Consulte o seguinte Microsoft.NET Framework guia do desenvolvedor documentação:
Segurança de aplicativos Web do ASP.NET
http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71). aspx
Para obter mais informações sobre o namespace System.Web.Security , consulte o seguinte Microsoft.NET Framework Documentação de referência:
System.Web.Security Namespace
http://msdn2.microsoft.com/en-us/library/System.Web.Security (vs.71). aspx
Para obter mais informações sobre a configuração do ASP.NET, consulte o seguintes artigos do guia do desenvolvedor do Microsoft.NET Framework:
Configuração do ASP.NET
http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71). aspx

Seções de configuração do ASP.NET
http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71). aspx
Para obter informações sobre as diretrizes de segurança do ASP.NET, consulte o o seguinte documento MSDN:
Autenticação no ASP.NET: diretrizes de segurança do .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

Propriedades

Artigo: 301240 - Última revisão: 15 de novembro de 2012 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
Palavras-chave: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 301240

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com