Autenticação Basica - Macete
Autor: Theo Alexandre Miliani | Publicado: 2012-05-11T06:49:00-07:00

Como eu vim do asp classico, a comparação fica inevitavel, no asp classico você tem que colocar a cada lugar o processo de autenticação, fazer a logica para trazer para a pagina que estava tentando acessar, consumindo por muitas vezes processos desnecessários, tudo para se fazer uma autenticação decente.
No MVC isso tudo mudou para que a autenticação fique ativa num controller inteiro basta que decoremos o controller com [Authorize] como mostra a imagem abaixo:


Essa decoração faz com que o framework va ate seu arquivo Web.Config que fica na raiz do projeto (lembrando que tem outro na raiz da pasta views) , verificar o modo de autenticação que será usado no projeto, temos as opções:

Forms: Você mesmo constroi um form que coleta informações do usuario e a autentica

None: todos tem acesso livre e irrestrito na aplicação

Passport: Utiliza o sistema passport da microsoft no qual basta que se tenha um email cadastrado na base da microsoft para que se tenha acesso a aplicação.

Windows: Usuarios autenticados no windows tem acesso a aplicação (por exemplo em uma rede corporativa

Em outros posts irei detalhar as outras opções, mas nesse irei falar um pouco da minha experiencoa com a opção forms.
No arquivo Web.Config da raiz da aplicação teremos um trecho de codigo parecida com:

&lt;authentication mode=&quot;Forms&quot;&gt;

      &lt;forms loginUrl=&quot;~/Login/Index&quot; /&gt;

    &lt;/authentication&gt;

&nbsp;&nbsp;&nbsp; 

aqui diz que o motedo que sera usado é o forms e que a action que sera usada para a autenticação esta no controller login e na action index.
Uma coisa que me impressionou muito com esse metodo de autenticação foi que a pessoa ao tentar acessar uma url protegida, ela é encaminhada para a url de autenticação, e depois de um login bem sucedido, a mesma retorna para a pagina que tentou acessar, tudo isso com pouca programação, ja que o framework armazena a pagina que o usuario tentou acessar na variavel ReturnUrl.
Porem o macete é que num controller comum que se tem a mesma action sobrecarregada com metodos diferentes essa variavel sempre fica acessivel na action inicial do projeto como mostra a figura abaixo:


Essa variavel tem que ser corretamente tratada pois pode ser que o usuario acesse o sistema atraves de sua pagina de login, e nesse caso a variavel ficara vazia, porem ela sera mostrada na barra dew endereços do navegador (ja que ela é uma query string) porem ao se clicar em login a mesma sera ignorada gerando confusão.

Esse metodo de autenticação so funciona com o SetAuthCookie que tera o valor que sera usado para futuras validações, como mostra o trecho de codigo abaixo.
Aqui para fins de exemplo, eu coloquei uma string fixa como informação, mas podera ser colocado qualquer coisa, como o id do usuário e afins.

System.Web.Security.FormsAuthentication.SetAuthCookie("Blog do Theo Alexandre Miliani", false);

Não adianta colocar outros tipos de cookies, pois o framework so reconhece esse cookie como autenticação.
Aqui vemos que o mesmo esta no namespace "System.Web.Security".
Entre aspas está a variavel a ser checada no caso "Blog do Theo Alexandre Miliani" e depois da viirgula fica a referencia se o cookie deve ser persistente (continuar valido mesmo apos fechar o navegador) ou não e aqui esta como não.

E para "Deslogar" do sistema basta uma linha:
System.Web.Security.FormsAuthentication.SignOut();

Espero ter ajudado.
Ate a proxima!