Sempre que construímos uma aplicação Web, é muito comum criarmos áreas
administrativas e restritas, onde os usuários poderão gerenciar o conteúdo das
páginas, pedidos, clientes, entre muitas outras coisas. Neste artigo explicarei
como fazermos para criarmos uma área restrita em sua aplicação.
Devemos
criar uma aplicação ASP.NET no Visual Studio. Inicialmente, criaremos uma pasta
chamada "Administracao" onde ficaram contidas as páginas restritas. Dentro dela
uma página "Default.aspx" e fora dela, devemos ter outro WebForm que será
responsável para que usuário faça o Login. Esta página chamará "Login.aspx". A
estrutura de arquivos de nosso projeto ficará algo como:
|
Figura 1 - Estrutura de
Arquivos da Aplicação. |
Depois disso,
devemos informar qual será a página de "Start". Para isso informaremos que a
página inicial será a "Default.aspx", dentro da pasta "Administracao". Explico:
Quando a aplicação é iniciada, a página "Default.aspx" será chamada, ao chamá-la
será verificado se o usuário corrente encontra-se ou não logado. Caso não
esteja, ele será redirecionado para a página "Login.aspx", onde ele será
obrigado à se autenticar.
|
Figura 2 - Definindo a página
inicial. |
Bem, antes de mais nada,
devemos construir a página "Login.aspx", onde devemos ter o formulário para que
o usuário possa digitar seu Login e Senha para se identificar. O formulário
ficará da seguinte forma:
|
Figura 3 - Página de
Login. |
Em primeiro lugar, quando
iniciamos a aplicação, reparem que ele requisitou a página "Default.aspx" dentro
do diretório "Administracao". Como foi verificado que o Usuário não está logado,
fui direcionado para a página de Login ("Login.aspx") e anexado na URL uma
QueryString chamada "ReturnURL", que será a página que o usuário será
redirecionado após efetuar a Login (caso seja válido). Outro ponto que gostaria
de chamar a atenção é para o
CheckBox "Lembrar". Ele serve para
definirmos se o
Cookie será ou não persistente, ou seja, se quando o
usuário fechar o Browser e abri-lo novamente, já ficará ou não autenticado.
Antes de codificarmos o evento
Click do botão de Login, vamos ver
as configurações que devemos fazer no arquivo Web.Config:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
|
<?xml version="1.0" encoding="utf-8"
?> |
<configuration> |
<system.web> |
<authentication mode="Forms"> |
<forms name="Administracao" loginUrl="Login.aspx"
/> |
</authentication> |
</system.web> |
<location path="Administracao"> |
<system.web> |
<authorization> |
<deny users="?" /> |
</authorization> |
</system.web> |
</location> |
</configuration> |
| |
Código 1 - Configurações no
arquivo Web.Config. |
Informamos no arquivo Web.Config a página que será efetuado o
Login e também informamos que a pasta "Administração" será restrita. A partir
disso o usuário deverá efetuar o Login antes de visualizar o conteúdo da pasta
"Administracao".
Agora vamos criar uma tabela no SQL Server chamada
"Administradores" onde armazenará o cadastro dos Administradores do Sistema.
Depois de criada, no evento Click do Botão de Login, devemos ir até o SQL
Server e verificar se esse usuário existe na Base de Dados. Caso positivo, ele
será redirecionado para a página que encontra-se na QueryString
"ReturnURL", caso contrário, não podemos permitir o acesso.
A Tabela
Administradores terá apenas o seguintes campos: Nome (Varchar(50)),
Login(Varchar(10)) e Senha(Varchar(6)). E o evento Click
ficará da seguinte forma:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
|
|
Imports
System.Web.Security |
Imports
System.Data.SqlClient |
|
Private Sub
btnLogin_Click(ByVal sender As
System.Object, _ |
ByVal e As System.EventArgs) Handles btnLogin.Click
|
|
Dim conn As SqlConnection = New SqlConnection("CONNECTION_STRING") |
Dim strQuery As
String |
Dim strRetorno As
String |
strQuery = "SELECT Nome
FROM Administradores " |
strQuery &= "WHERE
Login = @Login AND Senha = @Senha" |
Dim cmd As SqlCommand = New SqlCommand(strQuery, conn) |
|
Dim Login As SqlParameter = New SqlParameter("@Login", SqlDbType.VarChar, 10) |
Login.Value = Me.txtLogin.Text.Trim |
cmd.Parameters.Add(Login) |
|
Dim Senha As SqlParameter = New SqlParameter("@Senha", SqlDbType.VarChar, 6) |
Senha.Value = Me.txtSenha.Text.Trim |
cmd.Parameters.Add(Senha) |
|
Try |
conn.Open() |
strRetorno =
Convert.ToString(cmd.ExecuteScalar()) |
conn.Close() |
Catch ex As Exception |
Response.Write("Ocorreu
uma falha.") |
Finally |
If
Not strRetorno = String.Empty Then |
FormsAuthentication.RedirectFromLoginPage(Me.txtLogin.Text.Trim, _ |
Me.chkLembrar.Checked) |
Else |
Me.lblMensagem.Visible = True |
End
If |
End
Try |
|
End
Sub |
| |
Código 2 - Validando o
Usuário. |
Como podem ver, em primeiro lugar importamos os
Namespaces necessários, no caso: System.Data.SqlClient e
System.Web.Security. Depois, abrimos conexão com a Base de Dados e
através de uma query, passamos como parâmetros o Login e Senha, verificamos se
existe algum registro que atenda à essa condição. Caso exista, o usuário é
redirecionado para a página "Default.aspx" dentro da pasta "Administracao", caso
contrário uma mensagem será exibida para ele, informando que o acesso foi
negado. Lembrando que o CheckBox é passado como o segundo parâmetro para
a Sub RedirectFromLoginPage (Linha 31), informando se é ou não para
manter o Cookie persistente.
Importante: Não há
necessidade de nos preocuparmos em tratarmos os apóstrofos """ e ponto-e-vírgula
";" para aqueles que tentarem a "SQL Injection", pois quando trabalhamos com
Parameters, eles ficam encarregados de tratarem isso automaticamente.
Depois de validado, somos direcionados para a página requisitada
anteriormente. Veja abaixo:
|
Figura 4 - Página restrita
sendo exibida. |
Como passamos para a Sub
RedirectFromLoginPage o Login do Usuário (Linha 30 do Código 2), é
possível recuperarmos isso durante a sua sessão. Para isso pode fazer:
|
|
Imports
System.Web.Security |
|
Private Sub
Page_Load(ByVal sender As
System.Object, _ |
ByVal e As System.EventArgs) Handles MyBase.Load |
|
Me.lblMensagem.Text = "Bem Vindo à Área Restrita " &
_ |
HttpContext.Current.User.Identity.Name |
End
Sub |
| |
Código 3 - Podemos ver na
Linha 5, como recuperar o Login do Usuário.
|
O que nos restou agora é fazermos o "Logout" do Usuário. Para
isso, utilizaremos o LinkButton "Logout" e assim, ao clicar, a sessão do
usuário será finalizada. Veja o exemplo abaixo:
|
|
Private Sub
lnkLogout_Click(ByVal sender As
System.Object, _ |
ByVal e As System.EventArgs) Handles lnkLogout.Click |
|
FormsAuthentication.SignOut() |
Response.Redirect("Default.aspx", True) |
End
Sub |
| |
Código 4 - Efetuando o Logout
do Usuário. |
Utilizamos a Sub SignOut da classe
FormsAuthentication para finalizar a sessão do Usuário, e assim ele será
novamente redirecionado para a página de Login ("Login.aspx").
CONCLUSÃO: Com o ASP.NET a segurança em nossas aplicações Web
ficaram bem mais fáceis de serem implementadas e bem mais seguras. Este artigo
explica a parte superficial. Há muitas "features" que possam ser utilizadas para
garantirmos o máximo de segurança possível, mas é claro que tudo dependerá de
cada Aplicação.