|
Esse é o primeiro post de uma série sobre segurança em asp.net.
Considero esse tema de extrema importância para qualquer projeto. Pois
é a essência de qualquer sistema. Afinal, você não quer que qualquer um
tenha acesso a todas as páginas de sua aplicação, certo?
Bem… se fizermos uma rápida pesquisa na net sobre o assunto, iremos
achar uma quantidade muito grande de artigos sobre o mesmo. “E para que
estou criando mais um post sobre o assunto?”
Apesar da grande quantidade de material, eu sinto falta de algo
simples, prático e direto dizendo como implementar a segurança do
asp.net.
A intenção deste primeiro artigo é mostrar como utilizar os controles de segurança da tecnologia.
1. Conceitos
Antes de começarmos de fato a programar, vamos entender alguns conceitos:
1.1 Autenticação
Basicamente, é você informar para o sistema quem é você, e este por
sua vez dirá se você é um usuário válido ou não. Existem três modos de
autenticação: Form, Windows e Passport.
1.1.1 Form
Você vai informar para o sistema quem é através de login e senha. Ou
seja, você vai ter uma página feita especificamente para isso, para o
usuário informar quem ele é. Exemplo:

1.1.2 Windows
A aplicação irá validar se você é um usuário ou não, através das
credencias do Windows (usuário do Sistema Operiacional). Exemplo:
1.1.3 Passport
Não iremos falar muito deste modo de autenticação, até porque não é
muito utilizada no desenvolvimento de aplicações asp.net. Mas falando
rapidamente, foi criada pela Microsoft, onde a idéia principal é que as
pessoas teriam um passport no banco da Microsoft, e este daria
permissões de acesso aos sites. O benefício é que você não precisaria
gravar milhões de usuário e senhas que você possui no mundo da internet.
1.2 Autorização
Depois de ter conseguido acesso ao sistema o que falta?
Bem… A aplicação irá validar quais são as suas permissões no sistema.
Autorização é isto! Informa o que determinado usuário ou grupo de usuário podem ter acesso na aplicação.
Exemplo: Temos um
sistema escolar onde apenas os professores podem colocar as notas dos
alunos no sistema. Para ter acesso ao portal de alunos, o usuário
precisa estar logado como um.
Autenticação: Para acessar o portal de aluno, o usuário precisa informar quem é. E o mesmo precisa ser identificado como um aluno.
Autorização: Apenas professores estão autorizados a colocar notas dos alunos.
1.3 Membership
Em geral, é a classe do .NET responsável pela segurança (valida
credenciais e gerencia as configurações dos usuários). Ela encontra-se
no namespace System.Web.Security.
Para saber de mais detalhes, acesse o seguinte link:
http://msdn.microsoft.com/en-us/library/system.web.security.membership.aspx
2. Criando o banco da aplicação
É fato que os usuários, os grupos de usuários, permissões, entre
outras regras de segurança precisam ser armazenados em algum local,
certo? E onde esses dados são armazenados?
Isso mesmo!!! No banco de dados. Então vamos criar nosso banco no SQL Server 2005.
- Abra o Sql Server Management Studio ou o próprio Visual Studio para criarmos nosso banco.
- Crie seu banco com o nome de sua preferência (no meu caso coloquei como “DbBlog”).
Pronto!!! Nosso banco e “toda” a nossa estrutura do mesmo já esta criada.
- “Ham? Mas cadê a tabela usuário? a tabela regra? Hum…Está faltando algo, você não acha Felipe?”
Caros Leitores, vamos ter paciência. A estrutura do banco está
criada sim, pelo menos a parte que precisamos fazer manualmente. Falta
algumas tabelas, mas nós não iremos criá-las na mão. Até porque, para
usar os controles do asp.net (em modo default) precisamos ter uma
estrutura de banco que o asp.net reconheça.
Você concorda que iríamos perder muito tempo se fossemos criar todas
as tabelas? Sempre que precisássemos criar uma aplicação, iríamos ter o
mesmo trabalho de criar uma grande quantidade de tabelas. Bem…Isto é
fato!!! E pensando nisso, o pessoal de desenvolvimento do asp.net criou
uma ferramenta, chamada “REGSQL”, que se propõe a criar automaticamente
esta estrutura em nosso banco.
Para utilizar o REGSQL abra o prompt command do visual studio e digite “aspnet_regsql.exe”
A seguinte tela irá abrir:

Pressione “Next”. E a tela seguinte será esta:
Selecione a primeira opção caso queira configurar um banco existente ou um novo com informações referentes a segurança.
Selecione a segunda opção caso queira remover as configurações existentes em um banco.
No nosso caso vamos ficar com a primeira opção. Pressione “Next”.
Nesta etapa do wizard iremos informa qual o banco que vamos
configurar. Informe o server, o modo de autenticação (se vai ser
integrada ao windows ou via login e senha) e qual o banco que será
configurado. Pressione “Next” –> “Next” –> “Finish”
Agora nosso banco está devidamente configurado!!! A estrutura de seu banco deve estar da seguinte maneira:
3. Configurando a aplicação asp.net
Depois do banco já estar corretamente configurado, vamos para o lado da aplicação.
3.1. Crie um novo “web site”.
3.2. Crie uma nova pasta em seu projeto chamada de “security”. Apenas as pessoas logadas poderão acessar esta pasta.
3.3. Adicione uma página .aspx à pasta “Security”.
3.4. Crie um novo arquivo no diretório raiz da aplicação chamada de “Login.aspx” (Essa será a página de login do usuário).
3.5. Na toolbox procure pela aba “Login”
3.6. Arraste o controle “Login” para a sua página “Login.aspx”
3.7. Vamos deixar os arquivos desta maneira e vamos configurar o web.config agora. Abra-o.
3.8. Adicione a string de conexão que irá apontar para o banco no
web.config (Caso não saiba o que é string de conexão e nem do que ela é
composta, recomendo ler o meu post que fala sobre acesso a dados em c#:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=11748)
1: <connectionStrings>
2: <add name="csBdBlog" connectionString="Data Source=.\SQL;Initial Catalog=DbBlog;Integrated Security=true;" providerName="System.Data.SqlClient"/>
3: </connectionStrings>
3.9. Vamos definir agora como irá ocorrer a autenticação.
Em <system.web> temos uma tag chamada <authentication>
que tem o papel de informar o modo entre outras configurações da
autenticação.
Dentro da tag “authentication” iremos informar alguns dados da
autenticação Form, através da tag “forms”. Ficando desta maneira nosso
trecho de código:
1: <authentication mode="Forms">
2: <forms name=".APP" loginUrl="~/Login.aspx"></forms>
3: </authentication>
Onde “name” é o nome do Cookie que será criado para armazenar dados
do usuário. “LoginUrl” é a url a qual o usuário será redirecionado caso
tente acessar uma página que não tenha permissão.
3.10. Agora precisamos informas dados da autorização. Ou seja, após
o usuário estar logado, o que ele vai poder ver? ou o que ele não via
poder ver?
Fora de “system.web” iremos adicionar o seguinte trecho de código:
1: <location path="Security">
2: <system.web>
3: <authorization>
4: <deny users="?"/>
5: </authorization>
6: </system.web>
7: </location>
Obs: O código informa basicamente que os usuários anônimos (?) não poderão acessar a pasta Security.
3.11. Para finalizar as configurações do Web.Config, temos que
adicionar a tag “<membership>”. A possibilidade de customização é
imensa. Então irei demonstrar como está o meu código e em seguida
comentamos o mesmo.
1: <membership defaultProvider="blogProvider" userIsOnlineTimeWindow="20">
2: <providers>
3: <remove name="AspNetSqlProvider"/>
4: <add name="blogProvider"
5: type="System.Web.Security.SqlMembershipProvider"
6: connectionStringName="csBdBlog"
7: enablePasswordRetrieval="false"
8: enablePasswordReset="true"
9: requiresQuestionAndAnswer="true"
10: passwordFormat="Hashed"
11: applicationName="/"/>
12: </providers>
13: </membership>
14:
- - “connectionStringName” – Nome da string de conexão que aponta para o banco que está devidamente configurado com o “regsql”
- - “enablePasswordRetrieval” – Informa se o password poderá ser recuperado.
- - “enablePasswordReset” – Se o password poderá ser resetado.
- -“requiresQuestionAndAnswer” – Sabe quando você vai se cadastrar em
algum site, e em um dado momento ele pede uma pergunta e uma resposta
secreta? É a intenção deste elemento. Informa se essa pergunta e essa
resposta vão fazer parte do formulário de cadastro do usuário.
3.12. Ótimo!!! Finalizamos as configurações no web.config. Vamos para o próximo passo.
4. Ferramenta ASP.NET Configuration.
Em asp.net temos uma ferramenta que nos permite fazer algumas
configurações administrativas de nosso site, como cadastrar usuário,
remover usuário, adicionar grupo, remover grupo…
Para acessar esta ferramenta, localize no menu o item “website” –> “asp.net configuration”.
Na tela que apareceu escolha a aba “Security”
Nessa aba, podemos gerenciar os usuários e regras de acesso. Vamos
criar um usuário qualquer para servir de teste em nossos exemplos.
Ok. Para esse exemplo já podemos fechar a página do “asp.net configuration”.
5. Testando o que já foi feito
Depois de configurar o nosso banco, o web.config e criar um usuário
qualquer, chegou a hora de testar o que fizemos até o dado momento.
Tente rodar a página que está dentro da pasta “security” e veja o que acontece
E a página que aparece é a Login.aspx, pois não temos acesso as
páginas que estão dentro de “securiy”. Pois até o dado momento estamos
anônimos. Temos que nos identificar.
Se identifique e note para que página ele irá nos redirecionar
Agora sim temos acesso as páginas que não tínhamos acesso anteriormente.
6. Os Outros controles de Login
Depois de tudo configurado, a utilização dos controles fica trivial. É questão apenas de soltar os controles na tela.
Para fechar, vamos falar de alguns controles de Login RAPIDAMENTE.
Deixo com vocês a tarefa de estudar detalhadamente cada componente
desse.
6.1. Create User
Wizard para cadastrar usuários. Para utilizá-lo, arraste e solte na página desejada.
6.2 Login Status
Controle do tipo Link que dependendo do estado que você se encontra
(anônimo ou logado) ele exibe a mensagem de “login” (redirecionar para
página de login) ou de “log out” (finaliza sessão do usuário).
6.3 Login View
Esse controle é muito útil. Ele pode assumir dos comportamentos
diferentes de acordo com o seu status. Ou seja, ele tem dois templates,
um para quando o usuário está anônimo e o outro para quando está logado
no sistema.
6.4 Login Name
Exibe na tela o nome do usuário logado.
6.4 Change Password
Wizard que possibilita a troca de senha de um determinado usuário.
6.5. Recovery Password
Possibilita que o usuário recupere sua senha através de seu email.
7. Finalizando
Neste primeiro artigo da serie vimos como implementar de maneira
simples e prática segurança em nossas aplicações asp.net através dos
controles já existentes no asp.net.
Nos próximos artigos iremos falar um pouco mais da classe membership.
obs: Para baixar o fonte, acesse:
http://cid-2d6d3503299ba131.skydrive.live.com/self.aspx/Artigos/EstudoMembership.rar
Abraço a todos!!!
|