11. MemberShip e Roles
No ASP Clássico e em outras linguagem para web você tinha que
fazer todo o trabalho de gerenciamento de usuários e grupos: Criar usuários,
paginas de logins, trocas de senhas, recuperação de senhas, autenticação,
criação de grupos de usuários, gerenciamento de grupos além de toda a estrutura
de armazenamento necessária para isto tudo. Você também tinha que programar
toda a parte de autorização de seu aplicativo: normalmente cada grupo de
usuários estava restrito a um determinado numero de ações que poderiam ser
executadas e ou paginas a qual ele poderia acessar.
Na primeira versão do ASP.NET muita coisa mudou, a programação
de tudo isso citado no parágrafo anterior ficou um pouco mais fácil, mas ainda
era preciso muito trabalho manual.
A partir do ASP.NET 2.0, um novo recurso denominado
MemberShip, veio para tornar tudo isso muito mais fácil. Mais do que isso, para
revolucionar o gerenciamento de usuário, grupos e permissões. Além de uma série
de controles prontos para gerenciamento de usuários e autenticação, o ASP.NET
pode agora cuidar do armazenamento de tudo isso automaticamente através de um
banco de dados do SQLExpress ou em qualquer outra fonte de dados que você
quiser, inclusive o Active
Directory.
Definindo um Site para utilizar Forms
Autentication
Uma aplicação Web pode ser totalmente publica, com um porta de
noticias, ou pode requerer autenticação, como um InternetBanking, ou ainda pode
ser um misto de ambos: Um site de comércio eletrônico onde você navega e compra
de forma anônima e se autentica na hora do pagamento.
A autenticação em uma aplicação Web pode se dar de varias
formas: Integrada com o Active Directory, onde poderão ser utilizadas as
credencias que o usuário logou no diretório, Passport, que é um serviço pago
mantido pela Microsoft e que já teve seu fim decretado, ou Forms, em que o
usuário é autenticado através de informações digitadas em um formulário.
A forma de autenticação na mais comum na internet é Forms.
Windows é util por exemplo, em uma aplicação de Intranet, em que podemos
aproveitar as credencias do usuário no Diretório.
|

|
Sugiro que você acompanhe os exemplos passa a passo, já
que uma etapa é diretamente dependente da outra.
|
Ao criar uma nova aplicação ASP.NET, por padrão ele não terá
qualquer tipo de autenticação e seus acesso será irrestrito.
Para conhecermos os conceitos crie uma aplicação com cinco
WebForms: Administracao.aspx, Default.aspx, Login.aspx, NovoUsuario.aspx e TrocarSenha.aspx.
Observe a aplicação na imagem abaixo:

Rode a aplicação e note que você pode navegar livremente entre
os formulários.
Preparando o Arquivo web.config
Para definir autenticação Forms devemos fazer algumas
alterações no arquivo web.config como no exemplo abaixo:
|

|
Você pode fazer as alterações necessárias no web.config
através da ferramenta ASP.NET Configuration, que pode ser acionada através do
ícone no
Solution Explorer.
|
|
<authentication mode="Forms">
<forms
name=".ASPXAUTH"
loginUrl="login.aspx"
defaultUrl="default.aspx">
</forms>
</authentication>
|
Você esta informando ao ASP.NET que vai utilizar autenticação
do tipo Forms, que o nome do cookie de autenticação utilizado será .ASPXAUTH
(padrão), que o formulário de autenticação será login.aspx e que o formulário
padrão será default. Outras configurações podem ser adicionadas a este nó,
estas exibidas são as mais relevantes.
Se você rodar a aplicação agora perceberá que ainda poderá
navegar livremente entre as páginas. O que deu errado? Embora você tenha
definido um método de autenticação, você ainda não restringiu o acesso de
usuários anonimos a aplicação. Isso deve ser feito com a adição de uma de um nó
autorization, onde negamos acesso a usuários desconhecidos (não
autenticados) representado pelo “?”:
|
<authorization>
<deny
users="?" />
</authorization>
|
|

|
Ao final deste capitulo, apresento o web.config completo,
da maneira que o seu deverá estar após todos os exemplos. Utilize-o para
localizar onde determinada configuração deve se encaixar. Não copie o arquivo
inteiro.
|
Agora defina a página clientes como página inicial e rode a
aplicação.
Você deve observar duas coisas:
Você foi redirecionado para a página login.aspx, pois é a
página definida para autenticação em nosso arquivo de configuração.
Na URL, o ASP.NET adicionou a página inicial solicitada, de
forma que você possa ser redirecionado automaticamente após a autenticação

Agora estamos prontos para autenticar o usuário. Porém antes
de autenticá-los precisamos criá-los, é o que vamos ver a seguir.
Criando novos usuários com o controle
CreateUserWizard
Criamos uma página para criação de usuários, NovoUsuario.aspx.
Em aplicações este tipo de pagina normalmente tem seu acesso irrestrito, ou
seja, usuários anônimos podem entrar livremente e se cadastrarem. Porém como
definimos autenticação por formulários, nenhum usuário conseguirá acessá-las
sem estar autenticado. Temos que torná-la publica, ou seja, de acesso anônimo.
Precisar definir algumas paginas, ou diretórios inteiros, com
acesso anônimo e outras não é algo comum, portanto é algo que você vai usar com
freqüência em suas futuras aplicações.
Para definirmos uma determinada página como publica basta
adicionarmos um nó location após o nó </system.web> já existente em nosso
web.config, da seguinte forma:
|
<location
path="NovoUsuario.aspx">
<system.web>
<authorization>
<allow
users="*"/>
</authorization>
</system.web>
</location>
|
Estamos definindo que a página NovoUsuario.aspx é de acesso
anonimo. Defina NovoUsuario.aspx como página inicial e rode a aplicação. Note
que você consegue acessa-la normalmente, embora o restante da aplicação ainda
lhe redirecione para o Login.
Agora basta acionar um controle CreateUserWizard a nossa
página de criação de usuários. Note que este controle possui dezenas de
propriedades que permitem sua personalização, inclusive a troca das mensagens e
labels. Não vamos entrar em detalhes porque é quase tudo bem intuitivo, basta
explorar o controle por alguns minutos.
Rode novamente a aplicação e crie um novo usuário, preenchendo
todos os campos obrigatórios, como na imagem abaixo:

Por padrão, a senha deve conter no mínimo 7 caracteres, sendo
no mínimo um caractere não alfanumérico (“#” por exemplo).
O ASP.NET informa que a criação do usuário ocorreu com
sucesso.

Antes de continuarmos, vamos entender o que o ASP.NET fez
internamente. Primeiramente abra ao Solution Explorer, clique com o botão
direito em cima da aplicação e clique em Refresh. Expanda o nó data. Note que foi criado um banco de dados SQL Server Express (mdb).

De um duplo clique sobre o banco para abri-lo no Server
Explorer. Note que foi criada toda a estrutura de tabelas necessárias para o
gerenciamento de usuários, grupos e permissões:

Se você examinar a tabela aspnet_user, verá que o usuário
criado esta armazenado nesta.
Autenticando usuários com Login
Criado nosso usuário, agora podemos autenticá-lo. Para isso
vamos utilizar o controle Login, encontrado também na barra de ferramentas de
mesmo nome. Coloque um controle na pagina Login.aspx, defina a pagina
default.aspx com pagina inicial e rode a aplicação.

Se você informou o usuário e senha corretamente será
redirecionado para a página Default e terá livre acesso a todas as demais
páginas da aplicação.
Trocando a senha com ChangePassword
Outra funcionalidade pronta e encapsulada em um controle é o
ChangePassword. Para utilizá-lo adicione o mesmo a pagina TrocarSenha.aspx,
defina esta como pagina inicial e rode a aplicação, após o login você é
redirecionado para uma troca de senha, onde você deve informar a senha atual, a
nova senha e a confirmação da nova senha:

Uma mensagem informa que a senha foi troca com sucesso:

Criando um atalho para Login ou Logout
com LoginStatus
O controle LoginStatus permite criar um atalho para efetuar um
login ou Logout do usuário. O controle possui duas visualização: Logged Out,
que deve ser definida em situações em que o usuário não se encontra
autenticado, e Logged In, quando o usuário já se autenticou no sistema, como você
pode ver na imagem abaixo:

Normalmente você vai colocá-lo na visualização Logged Out em
áreas publicas e como Logged In em áreas autenticadas. Vamos testá-lo das duas
formas.
Definimos anteriormente a pagina NovoUsuario.aspx como
publica, portanto a mesma poderá ser acessada sem autenticação. Coloque um
controle LoginStatus nesta pagina com a visão Logged out, defina esta pagina
como página inicial e rode a aplicação:

Ao clicar em Login o usuário é redirecionado para a página de
login da aplicação.
Agora vamos testá-lo na visão Logged In. Coloque um controle
LogginStatus na página default.aspx, defina sua visão como Logged In e defina
esta página como inicial. Ao rodar a aplicação você é direcionado para o Login,
pois default.aspx não permite acesso anônimo. Após a autenticação você é
redirecionado para a página default, onde o controle pode ser visualizado:

Clicando sobre o controle seu cookie de autenticação é
excluído, e você passa a ser um usuário não autenticado, portanto a aplicação o
redireciona para a página de login.