ASP
.NET - Autenticação de usuários - I
A ASP .NET possui recursos embutidos que podemos usar para definir a autenticação de usuários em aplicações Web. O conjunto dos novos recursos (desde a versão 2.0) chamados provedores faz parte da nova arquitetura chamada Provider Model onde os providers são componentes que fornecem serviços configuráveis idênticos aos plug-ins.
Os providers Roles e MemberShip fornecem os recursos para gerenciar a autenticação e autorização. Onde a autenticação é o processo para verificar a identidade do usuário e a autorização refere-se ao gerenciamento das permissões dos usuários.
Nas referências deste artigo você encontra alguns dos artigo onde eu já tratei do assunto usando os providers e o membership da ASP .NET.
Neste artigo eu pretendo mostrar como você mesmo pode implementar a autenticação de usuários em seu site ASP .NET. Vou começar definindo o cenário no qual vamos trabalhar:
Iremos implementar a autenticação de usuários em uma escola onde deveremos definir as permissões de acesso as páginas para os perfis de Administrator, Diretor, Professor e Aluno. Vamos usar os recursos da orientação a objetos e definir em um projeto Class Library uma classe base onde iremos implementar as funcionalidades pertinentes ao processo de autenticação. Deveremos também implementar as funcionalidades que permitem realizar a manutenção dos usuários.
Os recursos usados neste projeto serão:
Todos os recursos usados são gratuitos.
Criando o banco de dados e a tabela da aplicação
Abra o Visual SQL Server Management Studio e clique com o botão direito do mouse sobre o item Banco de dados (DataBase) e selecione Novo Banco de dados (New DataBase) :
Obs: As mensagens do meu SSMS estão em português pois eu apliquei o pacote de localização
![]() |
A seguir informe o nome do banco de dados Escola e clique no botão OK para criar o banco de dados Escola.mdf.
![]() |
Expanda os itens do banco de dados e clique com o botão direito do mouse sobre o item Tabelas e a seguir em Nova Tabela:
![]() |
A seguir defina a estrutura da tabela Usuarios conforme a figura abaixo onde temos os campos: id, login,senha, ativo,permissao e email. Sendo que o campo id é uma chave primária do tipo identity.
![]() |
Agora temos que definir uma stored procedure no banco de dados Escola que deverá realizar a autenticação do usuário verificando se o login e a senha do usuário estão cadastrados na tabela Usuarios.
Expanda o item Programação do banco de dados Escola e clique com o botão direito do mouse sobre o item Procedimentos Armazenados e a seguir em Novo Procedimento Armazenado...
![]() |
A seguir digite o código que define a criação da stored procedure (CREATE PROCEDURE) com o nome Autenticacao e utiliza os parâmetros @login e @senha e utiliza a instrução SQL SELECT:
![]() |
Assim já temos o banco de dados Escola e a tabela Usuarios criados e prontos para uso.
Agora vamos incluir alguns registros na tabela Usuarios e para isso vamos usar a instrução SQL INSERT INTO Abaixo um exemplo que inclui um usuário com permissão de Administrador. (para as demais permissões basta alterar a permissão e o login)
| INSERT
INTO [Escola].[dbo].[Usuarios] ([login] ,[senha] ,[ativo] ,[permissao] ,[email]) VALUES ('admin' ,'123456' ,1 ,1 ,'admin@bol.com.br') GO |
Ao final deveremos ter a tabela com os seguintes valores:
![]() |
Iremos usar esses valores para testar o nosso projeto.
Definindo o projeto ASP .NET
Abra o Visual Web Developer 2010 Express e no menu File clique em New Project;
A seguir selecione a linguagem Visual Basic e o template Web e a seguir clique em ASP .NET Web Application informando o nome EscolaNet e clique no botão OK;
![]() |
O template ASP .NET Web Application cria um projeto com uma estrutura definida que usa uma master page e algumas definições para conta de usuário que iremos remover deixando somente as páginas ASP .NET.
A seguir no menu File clique em Add -> New Project e selecione os templates Visual Basic -> Windows e Class Library informando o no me EscolaNet.Seguranca e clique no botão OK;
![]() |
Teremos assim uma solução contendo dois projetos: EscolaNet e EscolaNet.Seguranca
![]() |
Vamos definir o código do projeto EscolaNet.Seguranca
Renomeia o arquivo Class1.vb para Usuario.vb e defina neste arquivo o código abaixo:
Public Class Usuario
Public Enum Permissoes
Administrador = 1
Diretor = 2
Professor = 3
Aluno = 4
End Enum
Public Property ID() As Integer
Get
Return m_id
End Get
Set(ByVal value As Integer)
m_id = value
End Set
End Property
Private m_id As Integer
Public Property Login() As String
Get
Return m_login
End Get
Set(ByVal value As String)
m_login = value
End Set
End Property
Private m_login As String
Public Property Senha() As String
Get
Return m_senha
End Get
Set(ByVal value As String)
m_senha = value
End Set
End Property
Private m_senha As String
Public Property Ativo() As Boolean
Get
Return m_ativo
End Get
Set(ByVal value As Boolean)
m_ativo = value
End Set
End Property
Private m_ativo As Boolean
Public Property Permissao() As Permissoes
Get
Return m_Permissao
End Get
Set(ByVal value As Permissoes)
m_Permissao = value
End Set
End Property
Private m_Permissao As Permissoes
Public Property Email() As String
Get
Return m_email
End Get
Set(ByVal value As String)
m_email = value
End Set
End Property
Private m_email As String
End Class |
No arquivo Usuario.vb
estamos definindo 5 propriedades:
que representam um usuário
do nosso domínio e cujas Eu não vou implementar
outros métodos como Salvar,Excluir, Definimos também uma
enumeração para as permissões com Administrador
= 1 |
A seguir vamos incluir outra classe no projeto via menu Project -> Add Class com o nome Autentica.vb e inserir nesta classe o código a seguir:
Imports System.Data;
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections.Generic
Imports System.Web
Public Class Autentica
Inherits System.Web.UI.Page
Public Enum Permissoes
Administrador = 1
Diretor = 2
Professor = 3
Aluno = 4
End Enum
Public Property usuario() As Usuario
Get
Return TryCast(HttpContext.Current.Session("Usuario"), Usuario)
End Get
Set(ByVal value As Usuario)
HttpContext.Current.Session("Usuario") = value
End Set
End Property
Public Sub New()
End Sub
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
If Me.Usuario Is Nothing Then
Me.Redireciona()
Else()
MyBase.OnLoad(e)
End If
End Sub
Public Function Login(ByVal _login As String, ByVal _senha As String) As Boolean
Dim conexao As New SqlConnection(ConfigurationManager.ConnectionStrings("Escola").ConnectionString)
Dim comando As New SqlCommand("Autenticacao", conexao)
Dim leitor As SqlDataReader
comando.CommandType = CommandType.StoredProcedure
comando.Parameters.Add(New SqlParameter("@login", _login))
comando.Parameters.Add(New SqlParameter("@senha", _senha))
Try
conexao.Open()
leitor = comando.ExecuteReader()
If leitor.HasRows Then
Me.usuario = New Usuario() With { _
.ID = Integer.Parse(leitor("id").ToString()), _
.Login = _login, _
.Senha = _senha, _
.Ativo = leitor("ativo").ToString() <> "0", _
.Permissao = DirectCast(Integer.Parse(leitor("permissao").ToString()), Permissoes) _
}
Else
Me.usuario = Nothing
leitor.Close()
End If
Catch generatedExceptionName As Exception
Throw
Finally
conexao.Close()
End Try
Return Me.usuario IsNot Nothing
End Function
Public Sub Logoff()
Me.usuario = Nothing
Me.Redireciona()
End Sub
Public Sub Redireciona()
If Me.Usuario Is Nothing Then
HttpContext.Current.Response.Redirect("~/Login.aspx")
End If
'Há implementar
' If Not Me.Usuario.Ativo Then
' HttpContext.Current.Response.Redirect("~/AtivaUsuario.aspx")
' End If
Select Case Me.Usuario.Permissao
Case Permissoes.Aluno
HttpContext.Current.Response.Redirect("~/Alunos.aspx")
Exit Select
Case Permissoes.Administrador
HttpContext.Current.Response.Redirect("~/Admin.aspx")
Exit Select
Case Permissoes.Diretor
HttpContext.Current.Response.Redirect("~/Diretoria.aspx")
Exit Select
Case Permissoes.Professor
HttpContext.Current.Response.Redirect("~/Professores.aspx")
Exit Select
End Select
End Sub
End Class
|
No código desta classe temos o seguinte:
Estamos usando a classe HttpContext que engloba todas as informações específicas de uma requisição HTTP. O objeto HttpContext da requisição HTTP (do namespace System.Web) atual fornece acesso aos objetos intrínsecos Request , Response e Server para a requisição.
Agora abra o arquivo Web.Config e defina o código na página configurando a string de conexão
| ............. <connectionStrings> <add name="Escola" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Escola;Integrated Security= True" providerName="System.Data.SqlClient" /> </connectionStrings> ....................... |
Dessa forma estamos prontos para definir as páginas do projeto e acessar o banco de dados e a tabela Usuarios.
Aguarde a segunda parte do artigo: ASP .NET - Autenticação de usuários - II
Rom 3:10
como está escrito: Não há justo, nem sequer um.Rom 3:11
Não há quem entenda; não há quem busque a Deus.Rom 3:12
Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.Efs 2:8
Porque pela graça sois salvos, por meio da fé; e isto não vem de vós, é dom de Deus;Joã 14:6 Respondeu-lhe Jesus: Eu sou o caminho, e a verdade, e a vida; ninguém vem ao Pai, senão por mim.
Rom 5:1
Justificados, pois, pela fé, tenhamos paz com Deus, por nosso Senhor Jesus Cristo,Rom 5:2
por quem obtivemos também nosso acesso pela fé a esta graça, na qual estamos firmes, e gloriemo-nos na esperança da glória de Deus.Referências: