O ASP.NET MVC nos permite restringir o acesso aos nossos Controllers/Views de modo que, apenas os usuários que forem autenticados no sistema possam acessar tais recursos.

Vamos imaginar o projeto com a seguinte estrutura:

 

Na imagem acima podemos observar uma estrutura básica de um projeto em MVC, como contornado na figura, possuímos um Controller chamado PaginaController, que possui 3 métodos que retornam uma ActionResult (Pagina2, Pagina3 e Pagina4).

Ao executar nossa aplicação, o resultado apresentado é o seguinte:

Até aqui tudo tranqüilo, porém gostaríamos que apenas os usuários autenticados no sistema pudessem acessar tais menus.

Para tanto, vamos decorar nosso Controller chamado PaginaController com o atributo AuthorizeAttribute.



Isto define que TODOS os métodos existentes dentro de PaginaController necessitam da autenticação por parte do usuário. Podemos também, defini-lo apenas em alguns métodos ao invés de definirmos no Controller.

Agora, vamos definir o seguinte código em nosso arquivo web.config:



Definimos acima que, a autenticação do usuário será feita através de um formulário, e este formulário foi definido como /Conta/LogOn. Devemos então, criar um Controller Conta com o método LogOn. Ao final nosso projeto deve estar como abaixo:

 

Acima podemos ver que criamos um Controller chamado ContaController, que se responsabiliza apenas por efetuar o Logon e Logoff do usuário.

Esclarecendo como “as coisas funcionam”, quando for realizada uma requisição a qualquer ActionResult que possua o atributo Authorize, como por exemplo o método Pagina2 dentro de PaginaController, é verificado se o usuário está autenticado no sistema, se a resposta for positiva é redirecionado para sua requisição solicitada, ou seja, /Pagina/Pagina2.

Caso o usuário não esteja autenticado, o mesmo é redirecionado para o formulário de autenticação definido no web.config (/Conta/LogOn). Note que, na imagem acima, ao realizar o POST do formulário, é verificado se o login e senha do usuário são respectivamente “rafael” e “123”, para a realização da rotina de autenticação.

Vamos então criar a autenticação do usuário, a forma mais simples é utilizarmos a classe FormsAuthentication localizada dentro no namespace System.Web.Security,  como demonstrado abaixo:

Observe, utilizamos a rotina SetAuthCookie para criarmos um cookie de autenticação, este método recebe 2 parâmetros: o primeiro é o nome do cookie, e o segundo é se o cookie será persistente, ou seja, mesmo fechando o browser o usuário continua autenticado.

Note também que foi recebido um parâmetro chamado returnUrl, este parâmetro nos mostra qual a requisição que o usuário solicitou, para que seja possível redirecioná-lo após sua autenticação.

Para efetuarmos o Logoff foi utilizado o método SigOut, responsável por remover a configuração de autenticação do usuário.

PRONTO! agora já é possível solicitar a autenticação do usuário quando desejado. Vamos apenas criar uma verificação em nossa Master Page chamada Site.Master para conferir se o usuário esta autenticado ou não, afim de exibirmos um link de LogOn e LogOff, conforme abaixo:

 
Rafael Zaccanini
MTAC – Microsoft Technical Audience Contributor
Blog: http://www.rafaelzaccanini.net
Twitter: 
@rafaelzaccanini
Facebook: http://www.facebook.com/RafaelZaccaniniNet