Construindo uma Área Restrita


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:

1
2
3
4
5
6
7
8
 
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:

9
10
11
12
13
14
 
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.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s