Whats new? | Login
Cadastre-se | Atendimento | RSS
 
Live chat by Netwatts
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos
Você está em: / canal .net [artigos]
   + .net:   artigos   |   vídeos   |    cursos   |    mais
 
 
Outras seções:
Home 
Entenda o site 
Revistas 
Canais 
Cursos 
Palestras 
Suporte 
Fórum 
Oportunidades 
 Todos os links 

 
  Ir para o Canal .net  
+Canais:
Canal Delphi 
Canal Java 
Canal .net 
Canal Banco de dados 
Canal Mobile 
Canal Ruby on Rails 
Canal PHP 
Canal ASP 
Canal WebDesign 
Canal Engenharia de Software 
Canal Linux 
Canal Scripting 
Canal Outros 
  Todo conteúdo DevMedia 

 
  ver cursos de .net  
+Cursos:
Cursos de Java 
Cursos de .net 
Cursos de Banco de dados 
Cursos de Delphi 
Cursos de Engenharia de Software 
Cursos de Ruby on Rails 
Cursos de ASP 
Cursos de WebDesign 
Cursos de PHP 
Cursos de PalmOS 
Cursos de Linux 
Cursos de Scripting 
  Formações completas 
  Todos os cursos 

 
Canal de conteúdo .net
Revista .net Magazine
Suporte .net
Formacoes completas .net
Palestras de .net
E-books de .net
Downloads de .net
 

+Revistas:
ClubeDelphi 
.net Magazine 
Java Magazine 
webMobile Magazine 
SQL Magazine 
Engenharia de Software Magazine 
  Edições anteriores impressas 
  Todas as revistas 


Este post foi publicado diretamente pelo autor e não foi revisado pela DevMedia.
[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 0,00 (assinante) ou R$ 0,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 0,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia


Segurança em ASP.NET e C# [Parte 1]

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:

ScreenShot001


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:

ScreenShot002


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.

  1. Abra o Sql Server Management Studio ou o próprio Visual Studio para criarmos nosso banco.
  2. Crie seu banco com o nome de sua preferência (no meu caso coloquei como “DbBlog”).

    ScreenShot003

    ScreenShot004


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”

ScreenShot005


ScreenShot006


A seguinte tela irá abrir:

ScreenShot007


Pressione “Next”. E a tela seguinte será esta:

ScreenShot008


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”.

ScreenShot009

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”

ScreenShot010


ScreenShot011


ScreenShot012


Agora nosso banco está devidamente configurado!!! A estrutura de seu banco deve estar da seguinte maneira:

ScreenShot014



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”.

ScreenShot015


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).

ScreenShot016


3.5. Na toolbox procure pela aba “Login”

ScreenShot018


3.6. Arraste o controle “Login” para a sua página “Login.aspx”

ScreenShot019


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”.

ScreenShot020 

ScreenShot021


Na tela que apareceu escolha a aba “Security”

ScreenShot022


Nessa aba, podemos gerenciar os usuários e regras de acesso. Vamos criar um usuário qualquer para servir de teste em nossos exemplos.

ScreenShot023


ScreenShot024


ScreenShot025


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

ScreenShot026


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.

ScreenShot028


ScreenShot029


Se identifique e note para que página ele irá nos redirecionar

ScreenShot030


Agora sim temos acesso as páginas que não tínhamos acesso anteriormente.

ScreenShot031



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.

ScreenShot032


ScreenShot033



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).

ScreenShot034


ScreenShot035


ScreenShot036



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.

ScreenShot037


ScreenShot038


ScreenShot039


ScreenShot040



6.4 Login Name

Exibe na tela o nome do usuário logado.

ScreenShot041


ScreenShot042



6.4 Change Password

Wizard que possibilita a troca de senha de um determinado usuário.

ScreenShot043


ScreenShot044



6.5. Recovery Password

Possibilita que o usuário recupere sua senha através de seu email.

ScreenShot045


ScreenShot046



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!!!





FELIPE JOSÉ FONSECA PIMENTEL
Aluno de graduação do 7º período do curso de ciências da computação da UNICAP (Universidade Católica de Pernambuco). Atua na área de TI a um ano e meio. E ocupa o cargo de Engenheiro de Software de uma grande empresa de Pernambuco.
Ver space do autor


Estatísticas deste post:
Visualizações:  2876
Favoritado:  5 vez(es)
 
Conteúdo:
Didática:
Utilidade:
1 0
Feedbacks: 1

  Central de Serviços:
Inclua seu próprio artigo! (ajuda)
Participe! Inclua um comentário
Adicionar este post a Favoritos
Marcar este post como lido/assistido
Inclua uma anotação pessoal (ajuda)
RSS Feeds
Versão para impressão



Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


[Fechar]

Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2009 - Todos os Direitos Reservados a DevMedia Group