Autenticação de Usuários em Sistemas Web – ASP.NET

Uma tarefa bastante comum em sistemas web é a autenticação de usuários, ou seja, o controle de acesso dos usuários ao sistema. Normalmente esse procedimento é feito utilizando um ‘login’ e ‘senha’: o usuário informa seu ‘login’ e sua senha secreta. O sistema, então, verifica em um banco de dados se existe o cadastro das credenciais desse usuário. Se não houver registro o acesso será negado. Se houver, o usuário poderá ter acesso as funções do sistema. Claro que além do controle de acesso ao sistema, tem o controle de permissões; controle de ações do usuário já no sistema. Mas isso é outra situação e pode ser assunto para outra publicação.

Neste post vamos mostrar uma forma bem simples de controlar o acesso de usuários a sistemas ASP.NET que utilizam os WebForms. O procedimento é amplamente utilizado em nossos sistemas e isso é maior garantia de eficiência. É fato que o framework já implementa nativamente um controle de autenticação. Para saber mais clique aqui ou faça uma pesquisa sobre o assunto na Internet. Particularmente, preferimos não utilizar a forma disponibilizada pelo framework. O motivo é simples: gostamos de ter total controle das ações em nossos sistemas. Por ser um framework, muitos processos ficam ocultos ao desenvolvedor o que pode provocar a utilização incorreta do recurso. Claro que buscando material específico pode-se aprender sobre sua melhor utilização. Contudo, um pouco de tempo será investido em aprendizado de conceitos específicos; conceitos que só se aplicam ao ambiente ASP.NET. Entendemos, então, que é preferível investir em aprender a respeito de conceitos teóricos genéricos envolvidos no problema e que possam ser aplicados em qualquer plataforma ao invés de investir tempo em situações com aplicabilidade restrita. Por exemplo, consideramos mais produtivo aprender antes sobre autenticação de usuários em sistemas web do que somente saber com utilizar o recurso de autenticação de um framework específico, como o do ASP.NET. O objetivo nosso é ter conhecimento independente de plataforma. Conhecimento esse que possa ser aplicado a qualquer ambiente de desenvolvimento web onde haja necessidade de controle de acesso. Daí, preferimos abrir mão da utilização da forma nativa de controle de usuário disponível na plataforma ASP.NET e partir para implementação personalizada.

A forma que utilizamos para controlar o acesso de usuários ao sistema envolve o uso de variáveis de sessão. Este é um recurso presente em todas as plataformas de desenvolvimento web. O procedimento consiste em: a partir da página de login, criar uma variável de sessão que será vista por todas as páginas da aplicação. O usuário irá digitar seus dados na página de login e se forem aceitos, será criado uma variável de sessão que irá permitir seu acesso às outras páginas. Cada página a ser chamada deverá verificar a existência dessa variável de sessão para, assim, dar continuidade a requisição. Quando a sessão expirar por algum motivo todas as variáveis de sessão serão destruídas inclusive a que controla o acesso do usuário. E quando isso acontecer, no momento em que uma página verificar que a variável de sessão não mais existe, o usuário será redirecionado para a tela de login onde deverá fornecer novamente as suas credenciais. A seguir vamos mostrar um passo-a-passo de como construir o processo no ambiente ASP.NET/WebForms:

  1. precisamos definir o tempo de validade de uma sessão, ou seja, quanto tempo de inoperância do usuário irá provocar a expiração da sessão. Isso significa que se o usuário não fizer nada por esse tempo ele será obrigado a reentrar com o login/senha. Esse tempo deve ser definido no Global.asax.
  2. na sua tela de login, quando os dados de login/senha forem válidos uma variável de sessão será criada com alguma (ou todas) informações de usuário. Essa variável permanecerá na sessão até que ela (a sessão) expire ou seja removida. Lembrando que uma vez validado o usuário o sistema será redirecionado para uma página principal com opções de menu, por exemplo.
  3. a cada chamada de página, no evento Page_Load da página deverá haver uma verificação da existência da variável de sessão que controla o usuário; mesma variável criada na tela de login. Se essa variável existir tudo segue normalmente. Caso contrário, o sistema será redirecionado para a tela de login. A inexistência dessa váriavel pode significar uma das duas situações: o usuário está tentando chamar o sistema por outra tela que não a tela de login ou a sessão expirou por que o usuário levou muito tempo sem trabalhar no sistema (aquele tempo definido no primeiro item deste roteiro).
  4. pode-se, em algum momento, optar por fazer logoff manualmente, aí é só excluir a varíavel de sessão criada na tela de login. Isso irá provocar a necessidade de novo login, ainda que a sessão não tenha expirado.

Ao contrário do processo utilizado nativamente pelo famework, não será necessário, aqui, inserir opções no web.config da aplicação. Em contra partida, o único inconveniente é ter que colocar a verificação da variável de sessão em todas a páginas do sistema. No processo do framework essa necessidade não existe. Mas, analisando o custo/benefício pode ser melhor adotar a postura descrita anteriormente que consiste em colocar a verificação em cada página ao invés de depender do framework.

Tem um outro pequeno problema que também existe solução: se o usuário clicar no botão ‘Voltar’ do navegador. Isso acontecendo, o sistema retorna para uma tela anteriormente utilizada que está registrada no histórico do navegador, mesmo que a variável de sessão que controla o acesso do usuário não mais exista. Contudo, é possível colocar um Javascript para evitar que isso aconteça, ou seja, utilizar o botão “Voltar” do navegador e retornar a páginas do histórico anterior de navegação. Ainda assim, mesmo que não seja inserido o referido códido e haja a tentativa de executar alguma ação sem estar “logado”, o evento Page_Load poderá interceptar a requisição e verificar se existe ou não a variavel de sessão que indica se o usuário está “logado”. Se não existir ele será redirecionado para tela de login da mesma forma. De qualquer modo é recomendável aplicar o código em Javascript para evitar que ele use o botão voltar do navegador (sabe qual seria esse código?).

Claramente o processo é muito simples e pode ser adotado em qualquer ambiente de desenvolvimento web. O importante aqui é entender a importância da utilização da sessão de usuário em ambiente web além e também o seu funcionamento.

Aproveitando, quem desejar conferir a implementação completa do processo em um sistema real pode acessar nossa página de Sistemas com Código-Fonte e adiquirir uma aplicação. Assim poderá ver detalhes deste e de vários outros conceitos que utilizamos em nosso trabalho.

Vamos encerrando aqui e desde já agradecemos o interesse. Fique a vontade para perguntar e/ou registrar comentários.

Anúncios