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: