Como implementar a autenticação baseada em formulários de aplicação do ASP.NET utilizando o Visual Basic .NET

Traduções de Artigos Traduções de Artigos
Artigo: 308157 - 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 utilizando uma base de dados para armazenar os utilizadores.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server
  • Microsoft Internet Information Services (IIS) versão 5.0 ou posterior

Criar uma aplicação do ASP.NET utilizando o Visual Basic .NET

  1. Abra o Visual Studio .NET.
  2. Criar uma nova aplicação de Web do ASP.NET e especificar o nome e a localização.

Configurar as definições de segurança no ficheiro Web. config

Esta secção mostra como adicionar e modificar o <authentication></authentication> e <authorization></authorization> secções de configuração para configurar a aplicação do ASP.NET Utilize a autenticação baseada em formulários.
  1. No Solution Explorer, abra o ficheiro Web. config.
  2. Altere o modo de autenticação para formulários.
  3. Inserir a tag de <Forms>e preencha o adequado atributos. (Para mais informações sobre estes atributos, consulte a MSDN documentação ou a documentação de iniciação rápida ao que consta do </Forms>REFERÊNCIAS secção.) Copiar a seguindo o código e, em seguida, clique em Colar como HTML no menu Editar para colar o código de <authentication></authentication> secção do ficheiro:
    <authentication mode="Forms">
    	<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    	protection="All" path="/" timeout="30" />
    </authentication>
    					
  4. Negar o acesso ao utilizador anónimo do <authorization></authorization> secção do seguinte modo:
    <authorization>
    	<deny users ="?" />
    	<allow users = "*" />
    </authorization>
    					

Criar uma tabela de base de dados de exemplo para armazenar os detalhes de utilizadores

Esta secção demonstra como criar uma base de dados de exemplo para Armazene o nome de utilizador, palavra-passe e função para utilizadores. É necessário que a coluna de função Se pretender armazenar as funções de utilizador na base de dados e implementar baseada em funções segurança.
  1. No menu Iniciar do Windows, clique em Executare, em seguida, escreva Bloco de notas Para abrir Bloco de notas.
  2. Realçar o seguinte código de script SQL, com o botão direito do código e, em seguida, clique em Copiar. No bloco de notas, clique em Colar no menu Editar 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. Guarde o ficheiro como Users.sql.
  4. No computador do Microsoft SQL Server, abra Users.sql em Analisador de consultas. Lista de bases de dados, clique em pubse executar o script. Isto cria uma tabela de utilizadores de exemplo e preenche a tabela na base de dados a ser utilizado com este exemplo Pubs aplicação.

Criar uma página aspx

  1. Adicionar um novo formulário Web para o projecto com o nome Aspx.
  2. Abra a página aspx no editor e mudar para HTML Vista.
  3. Copie o seguinte código e utilizar a opção de Colar como HTML , no menu Editar para inserir o código entre o<form>etiquetas: </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 Web é utilizado para apresentar um formulário de início de sessão aos utilizadores para que estes possam Fornece o respectivo nome de utilizador e palavra-passe para iniciar sessão para a aplicação.
  4. Mudar para vista de estrutura e guarde a página.

O processador de eventos de código para que este valida as credenciais do utilizador

Esta secção apresenta o código que é colocado no código subjacente página (Logon.aspx.vb).
  1. Abra o ficheiro Logon.aspx.vb.
  2. Importe os espaços de nomes necessários no ficheiro de código subjacente:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. Criar uma função de ValidateUser para validar as credenciais de utilizador consultando o base de dados. (Certifique-se de que altere a cadeia de ligação para apontar para o base de dados.)
    Private Function ValidateUser(ByVal userName As String, ByVal passWord As String) As Boolean
            Dim conn As SqlConnection
            Dim cmd As SqlCommand
            Dim lookupPassword As String
    
            lookupPassword = Nothing
    
            ' Check for an invalid userName.
            ' userName  must not be set to nothing and must be between one and 15 characters.
            If ((userName Is Nothing)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
                Return False
            End If
            If ((userName.Length = 0) Or (userName.Length > 15)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
                Return False
            End If
    
            ' Check for invalid passWord.
            ' passWord must not be set to nothing and must be between one and 25 characters.
            If (passWord Is Nothing) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
                Return False
            End If
            If ((passWord.Length = 0) Or (passWord.Length > 25)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
                Return False
            End If
    
            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 the users table given a 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 = cmd.ExecuteScalar()
    
                ' Cleanup command and connection objects.
                cmd.Dispose()
                conn.Dispose()
            Catch ex As Exception
                ' 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)
            End Try
    
            ' If no password found, return false.
            If (lookupPassword Is Nothing) Then
                ' You could write failed login attempts here to the event log for additional security.
                Return False
            End If
    
            ' Compare lookupPassword and input passWord by using a case-sensitive comparison.
            Return (String.Compare(lookupPassword, passWord, False) = 0)
    
    End Function
    					
  4. Pode utilizar um dos dois métodos para gerar os formulários cookie de autenticação e redirecciona o utilizador a uma página adequada no evento cmdLogin_ServerClick . Código de exemplo é fornecido para ambos os cenários. Utilize um dos -los em conformidade com os seus requisitos.
    • Chamar o método de RedirectFromLoginPage para gerar automaticamente o cookie de autenticação de formulários e redireccionar o utilizador para uma página adequada no evento cmdLogin_ServerClick :
      Private Sub cmdLogin_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _
         Handles cmdLogin.ServerClick
         If ValidateUser(txtUserName.Value,txtUserPass.value) Then
            FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, _
            chkPersistCookie.Checked)
         Else
            Response.Redirect("logon.aspx", True)
         End If
      End Sub
      						
    • Gerar a permissão de autenticação, encriptá-la, criar um cookie, adicioná-lo para a resposta e redireccionar o utilizador. Isto dá-lhe mais controlar no modo de criar o cookie. Também pode incluir dados personalizados ao longo com o FormsAuthenticationTicket neste caso.
      Private Sub cmdLogin_ServerClick(ByVal sender As Object, _
         ByVal e As System.EventArgs) Handles cmdLogin.ServerClick
         If Validateuser(txtUserName.Value,txtUserPass.Value) Then
            Dim tkt As FormsAuthenticationTicket
            Dim cookiestr As String
            Dim ck As HttpCookie
      
            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) then ck.Expires=tkt.Expiration 
            ck.Path = FormsAuthentication.FormsCookiePath() 
            Response.Cookies.Add(ck)
      
            Dim strRedirect As String
            strRedirect = Request("ReturnURL")
            If strRedirect <> "" Then
               Response.Redirect(strRedirect, True)
            Else
               strRedirect = "default.aspx"
               Response.Redirect(strRedirect, True)
            End If
         Else
            Response.Redirect("logon.aspx", True)
         End If
      End Sub
      						

Criar uma página do default. aspx

Esta secção cria uma página de teste para que os utilizadores são redireccionados depois autenticar. Se os utilizadores navegam para esta página sem iniciar primeiro sessão a aplicação, são redireccionados para a página de início de sessão.
  1. Mudar o nome da página WebForm1. aspx existente como default. aspx, e abri-lo no editor.
  2. Mudar para vista HTML e copie o seguinte código entre o<form>etiquetas: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Este botão é utilizado para terminar a sessão a autenticação de formulários sessão.
  3. Mudar para vista de estrutura e guarde a página.
  4. Importe os espaços de nomes necessários no ficheiro de código subjacente:
    Imports System.Web.Security
    					
  5. Página de abrir o código subjacente (Default.aspx.vb) e a cópia do código que se segue no processador de eventos cmdSignOut_ServerClick :
    Private Sub cmdSignOut_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles cmdSignOut.ServerClick
       FormsAuthentication.SignOut()
       Response.Redirect("logon.aspx", True)
    End Sub
    					
  6. Guardar e compilar o projecto. Agora, pode utilizar o aplicação.

Resolução de problemas

  • Poderá pretender armazenar palavras-passe numa base de dados de forma segura. Que Pode utilizar a função de utilitário de classe de autenticação por formulários com o nome HashPasswordForStoringInConfigFile para encriptar as palavras-passe antes de armazenar na base de dados ou ficheiro de configuração.
  • Poderá pretender armazenar as informações de ligação de SQL no (Web. config) de ficheiro de configuração para que pode modificá-lo facilmente se é necessário.
  • Talvez seja melhor adicionar código para impedir que hackers que tentem Utilize diferentes combinações de palavras-passe do início de sessão. Por exemplo, pode incluem lógica que aceita apenas duas ou três tentativas de início de sessão. Se o utilizador não é possível iniciar sessão num determinado número de tentativas, poderá pretender definir um sinalizador do para não permitir que o utilizador iniciar sessão até que o utilizador reactiva a sua base de dados conta visitando uma página diferente ou chamando a linha de suporte. No Além disso, deve adicionar erro apropriadas sempre de processamento é necessário.
  • Uma vez que o utilizador é identificado com base na autenticação cookie, poderá pretender utilizar Secure Sockets Layer (SSL) nesta aplicação que ninguém pode obter o cookie de autenticação e qualquer outro objecto de valor informação que está a ser transmitida.
  • Autenticação baseada em formulários requer que o cliente aceitar ou activar os cookies no seu browser.
  • O parâmetro de tempo de espera do <authentication></authentication> secção de configuração controla o intervalo no qual o cookie de autenticação é regenerada. Pode escolher um valor que fornece melhor desempenho e segurança.
  • Determinados podem proxies intermédios e caches na Internet respostas do servidor Web que contêm cabeçalhos Set-Cookie, o que são em seguida, colocar em cache devolvidos a um utilizador diferente. Uma vez que a autenticação baseada em formulários utiliza um cookie para autenticar utilizadores, isto pode causar os utilizadores (ou acidentalmente intencionalmente) representar outro utilizador recebendo um cookie de intermediários de proxy ou cache que não foi originalmente concebido para os mesmos.

Referências

Para obter informações sobre como implementar simples baseada em formulários autenticação utilizando o <credentials></credentials> secção para armazenar os utilizadores e palavras-passe, consulte o seguinte artigo nas amostras de iniciação rápida do ASP.NET:
Autenticação baseada em formulários
http://quickstarts.asp.NET/QuickStartv20/ASPNET/doc/Security/formsauth.aspx
Para obter informações sobre como implementar a autenticação baseada em formulários por utilizar um ficheiro Extensible Markup Language (XML) para armazenar os utilizadores e palavras-passe, consulte o tópico seguinte no .NET Framework Software Development Kit (SDK) documentação:
Autenticação de formulários utilizando um ficheiro de utilizadores XML
aspx http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71)
Para mais informações sobre segurança de aplicações Web do ASP.NET, consulte o seguinte artigo na documentação do .NET Framework SDK:
Segurança de aplicações ASP.NET Web
aspx http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71)
Para mais informações sobre o espaço de nomes de System.Web.Security , consulte o seguinte artigo no .NET Framework SDK documentação:
aspx http://msdn2.microsoft.com/en-us/library/System.Web.Security (vs.71)
Para mais informações sobre a configuração do ASP.NET, consulte o artigos de .NET Framework SDK seguintes:
Configuração do ASP.NET
aspx http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71)

Secções de configuração do ASP.NET
aspx http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71)
Para obter informações sobre directrizes de segurança do ASP.NET, consulte o seguinte Documentação técnica da MSDN:
Autenticação no ASP.NET: orientações de segurança do .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
Para mais informações, consulte os seguintes livros:
Esposito, Dino. Criar soluções de Web com o ASP.NET e ADO.NET. Microsoft Press, 2001.

Howard, Michael e David LeBlanc. Programar códigos seguros. Microsoft Press, 2001.

Propriedades

Artigo: 308157 - Última revisão: 28 de junho de 2013 - Revisão: 9.0
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbweb kbmt KB308157 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: 308157

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