Proteção da Página de Logout


Quando nossa aplicação ASP.NET exige o controle da autenticação e autorização para conceder ou negar acessos, é muito comum criarmos uma página chamada Logout.aspx, que no seu evento Load efetuamos a “limpeza”. Essa “limpeza” consiste em remover o cookie de autenticação (método SignOut), apagar eventuais variáveis de sessão e alguma outra finalização específica daquela aplicação.

O problema reside quando você coloca essa página dentro de um diretório que também está protegido. Imagine que tenho um diretório dentro da aplicação chamado AreaRestrita. Dentro dele temos as várias páginas da aplicação, incluindo a Logout.aspx que, provavelmente, em todas as páginas haverá um link apontando para ela. Na configuração, especificamos que somente usuários autenticados poderão ter acesso ao conteúdo – páginas – deste diretório.

Neste caso, se o usuário efetuar o login, e deixar a aplicação aberta, sem navegar por ela, o cookie irá expirar. Como ele não tem mais nada para efetuar na aplicação, ele clica no link Logout. Como qualquer página do diretório está protegida contra usuários não autenticados, ao tentar acessar a página Logout.aspx, o usuário será redirecionado para a página de Login, para que ele informe as credenciais de acesso, para depois acessar a página de Logout. Aparentemente o usuário saiu da aplicação, mas a página Logout.aspx não foi executada e, consequentemente, toda a “limpeza” que você faria, não irá ocorrer.

Mesmo que utilize outra técnica, como um LinkButton e a “limpeza” sendo realizada em seu evento Click, você irá esbarrar no mesmo problema. A solução aqui é manter a página Logout.aspx acessível a todos os usuários, definindo isso no arquivo de configuração da aplicação (Web.config), assim como é mostrado abaixo:

<?xml version=”1.0″?>
<configuration>
  <location path=”Logout.aspx”>
    <system.web>
      <authorization>
        <allow users=”*”/>
      </authorization>
    </system.web>
  </location>
</configuration>

Particularmente não gosto muito da necessidade de ter que criar uma página para isso. O Logout não deveria ser uma página, mas sim uma ação a ser executada. Ponto positivo para o MVC, que nos permite criar um método (Action) chamado Logout, e invocá-lo a partir de um controle da View, sem a necessidade de ter toda a complexidade de uma página ASPX por trás de uma tarefa, que na maioria das vezes, é muito simples.

Anúncios

2 comentários sobre “Proteção da Página de Logout

  1. Oi Israel,

    Fiz o que vocë indicou, mas não funcionou, mesmo com a página logout.aspx, quando digito a url direta ele entra novamente sem verificar o cookie.

    Aparentemente ele não está apagando o cookie que eu criei. Vocë tem alguma idéia?

    Um abraço.

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