ASP.NET FORMS Authentication

O ASP.NET, conforme mencionamos em artigos anteriores, realiza por conta própria muitas tarefas que antes tinhamos que programar manualmente.

Uma destas tarefas é o controle de login. No ASP tradicional são necessários os seguintes passos para realizar o controle de login :

1) Escolher o nome de uma variável de sessão e os valores que ela conterá (1 se o usuário estiver logado, por exemplo)
2) Criar uma página para validar o login do usuário
3) Se o login for válido, atribuir um para a variável de sessão escolhida
4) Em todas as páginas, testar o valor da variável de sessão. Se o valor for diferente de 1 redirecionar o usuário para a página de login
5) Ao redirecionar para a página de login deve transmitir a url da página que o usuário tentou acessar
6) Após o login a página de login deverá verificar se recebeu alguma url por parâmetro e, se sim, se desviar para ela, permitindo assim que o usuário chame diretamente uma página, logue-se e acesse esta página

Por exemplo, se o usuário chamar o endereço : http://site/paginatexto.asp desvia-se o usuário para o endereço http://site/login.asp?url=/paginatexto.asp

Desta forma o usuário verá a tela de login onde poderá ser validado. Após a validação a página de login poderá utilizar o parâmetro que recebeu para desviar o usuário de volta exatamente para a página que ele havia originalmente chamado.

No ASP.NET a estrutura de funcionamento continua a mesma, afinal, a web não foi mudada. O que mudou é que não precisamos nós mesmos implementar todos os passos, pois o ASP.NET realiza esses passos para nós.

Para que o ASP.NET possa realizar o processo de autenticação para nós é primeiramente devemos informar a ele que desejamos realizar esse processo de autenticação. Essa informação é dada ao ASP.NET através de um arquivo chamado web.config. Esse arquivo é escrito em formato XML e pode ser inserido em qualquer diretório da aplicação. Ele contém configurações a nível de site que serão válidas a partir do diretório em que ele se encontra e em todos os sub-diretórios. Por isso é comum que um web.config seja sempre inserido na raiz do site.

Através do web.config vamos fornecer as seguintes informações :

- Que tipo de autenticação iremos realizar, no caso, baseada em formulário. É possível também utilizar outros tipos de autenticação, tal como a autenticação integrada com o sistema operacional, normalmente utilizada em ambientes de intranet.

- Qual formulário iremos utilizar para realizar a autenticação

- Quais usuários poderão acessar as páginas. No caso utilizaremos um simbolo para indicarmos que apenas usuários autenticados poderão acessar as páginas.

- O nome da variável que será utilizada para identificar o usuário logado. Aqui valem duas observações : o ASP.NET não utiliza variáveis de sessão para isso, mas sim cookies; o nome indicado não é realmente o nome, mas um sufixo para o nome.

Com o que mencionei até agora você já deve ter percebido o que irá ocorrer : O ASP.NET controlará o processo de autenticação automaticamente. A partir do momento que configuramos o web.config para realizar a autenticação via formulário o ASP.NET passa a verificar em todos os acessos a página se o usuário está logado ou não, verificando se o cookie de autenticação existe. Se não existir ele desviará a execução para o formulário de login que houvermos informado no web.config, transmitindo via GET a página que o usuário tentou acessar. Isso nos economiza grande trabalho de desenvolvimento.

Você deve ter observado que, já que está sendo utilizado um cookie ao invés de uma variável de sessão este cookie poderia ficar gravado na máquina do usuário entre uma visita e outra. A questão é : Realmente pode, se você quiser. Existem cookies temporários e cookies permanentes, os temporários são destruidos quando o browser é fechado, os permanentes são gravados em disco. O ASP.NET permite que você determine se deseja que o cookie de autenticação seja permanente ou temporário.

Isso é util para que você possa fornecer ao usuário a opção de lembrar suas informações de login, assim quando o usuário retorna ao site o cookie de login já encontra-se lá e consequentemente ele pode acessar as páginas sem redigitar suas informações de login. Muito cômodo e, sendo apresentado como uma opção para o usuário, ele assume os riscos.

No VB.NET ao criarmos um projeto o web.config já é criado para nós, precisaremos apenas alterar algumas das tags que ele possui, veja :

<authentication mode="Forms" >
<forms name="SecureWeb" loginUrl="login.aspx" />
</authentication>


<authorization>
<deny users="?" />
</authorization>


Com o elemento authentication estamos determinando o tipo de autenticação que iremos utilizar (forms) e a url do formulário de autenticação e o nome do cookie de autenticação.

Já como o elemento authorization determinamos quais usuários podem acessar a aplicação. A ? utilizada no elemento Deny indica que deve ser negado acesso a usuário não identificados, ou seja, não logados.

O próximo passo é a montagem da tela de login. A tela de login precisará ter, além das caixas de usuário e senha, uma checkbox perguntando ao usuário se deseja gravar sua identificação em um cookie permanente para facilitar seu retorno ao site. Claro que implementar essa checkbox é opcional, mas é muito simples de fazer e é um conforto útil para o usuário.

Veja como fica a programação do botão Ok da tela de login ficaria assim :

Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click
If txtLogin.Text = "DENNES" AndAlso txtSenha.Text = "SENHA" Then
FormsAuthentication.RedirectFromLoginPage(txtLogin.Text, chkLembrar.Checked)
End If
End Sub


Claro que nesse ponto seria feita uma busca em um banco de dados para validar o login do usuário, mas isto é apenas um exemplo da autenticação. O importante aqui é observar o funcionamento do método RedirectFromLogin page do objeto FormsAuthentication. Esse método gera o cookie identificando que o usuário encontra-se logado e redireciona o usuário para a página que ele solicitou.

Observe o 2o parâmetro, que determina se o cookie será permanente ou temporário. Neste exemplo estamos configurando este 2o parâmetro com o checked da checkbox inserida na tela de login. Desta forma o usuário pode optar por manter seu login registrado em cookie ou não. Se não tivessemos criado a checkbox na tela deveriamos utilizar false como default.

Para testar podemos criar uma ou mais páginas dentro desta aplicação e tentar chama-las diretamente. Você verá que será automaticamente desviado para a tela de login e só conseguirá fazer o acesso às demais páginas após se logar.

Caso você deseje que algumas páginas sejam acessíveis mesmo que o usuário não esteja logado pode criar um sub-diretório e criar um web.config separado para este sub-diretório, sem criar a exigência de autenticação.

Com isso, os 6 passos necessários para a montagem de uma autentiação em ASP foram reduzidos pelo ASP.NET a apenas 2 passos : A configuração do web.config e a montagem de uma tela de login.

Dennes Torres
MCSD,MCSE,MCDBA