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).
OBS: Gostou da organização de nosso projeto? Veja como deixá-lo assim aqui.
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 dePaginaController, é 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: