none
Implementando segurança - Como fazer ??

    Question

  • Salve galera,

     

    Preciso de umas dicas dos mais entendidos ou que já tenham passado por isso...

     

    Desenvolvi a uns 3 anos atrás um sisteminha web (ASP) aqui para nosso banco de imagens, somente para uso interno nosso... agora, preciso liberar isso para a internet para que alguns clientes possam visualizar, porém preciso ter o controle total de quem acessa, através de usuário e senha, além de controle de nível de acesso (algumas partes não estarão disponíveis aos clientes).

    A idéia é que o cliente assim que acessa a url caia na página de login e através do tipo de usuário seja definido qual o tipo de acesso ele tenha... A pergunta: Qual o melhor modo de desenvolver isso?

     

    Grande abraço...

     

    Wender A. Paderes

     

    Wednesday, April 18, 2007 6:58 PM

Answers

All replies

  • Wednesday, April 18, 2007 7:29 PM
    Moderator
  • Oi !

     

    Você está utilizando ASP ou ASP.NET ? Porque postou no fórum de ASP.NET ...

     

    Vou supor que vai refazere a aplicação em ASP.NET....

     

    Dê uma olhada no artigo em http://www.bufaloinfo.com.br/Artigos/artigo1510.asp

     

    Depois considere que com o visual studio 2005 isso já evoluiu. Faça testes utilizando o menu website->asp.net configuration e observe os webcontrols de segurança. De uma olhada no artigo em http://www.bufaloinfo.com.br/artigos/coluna32.asp

     

    Por fim, não deixe de ler http://www.devaspnet.com.br/colunas/coluna0126.aspx

     

    []'s

     

     

    Wednesday, April 18, 2007 7:45 PM
  • Dennes,

     

    Foi desenvolvido em ASP, porém o IIS já foi todo atualizado e está habilitado em ASP.NET 2.0, então, como houve melhoras na linguagem vou atualizar para ASP.NET 2.0... por isso postei aqui, obrigado pelos links, tanto os seus como os do Ricardo, vou ler todos eles e começar a me familiarizar com as novas features...

     

    Obrigado

     

    Wender Paderes

    Thursday, April 19, 2007 1:04 AM
  • Salve pessoal,

     

    Depois de ler os artigos estou tentando implementar o sistema de login por Autenticação via Forms, porém ao tentar efetuar o login recebo essa mensagem de erro:

     

    Ocorreu um erro durante o Login:

    ExecuteReader: propriedade Connection não foi inicializada.

     

    Segue abaixo o código:

     

    Function ValidaUsuario(Lgn As string, Snh As string) As Boolean

    Dim strSQL as string = "Select * from Usuario Where Nome_user=@Lgn AND Snh_user=@Snh"

    Dim conexao As Data.OleDb.OleDbConnection

    Dim objDR As Data.OleDb.OleDbDataReader

    Dim Cmd As New Data.OleDb.OleDbCommand(strSQL, conexao)

    cmd.Parameters.Add(New Data.OleDb.OleDbParameter("@lgn", lgn))

    cmd.Parameters.Add(New Data.OleDb.OleDbParameter("@Snh", Snh))

    conexao = New Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=\endereço do banco;")

    Try

    conexao.Open()

    objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)

    if objDR.Read() Then

    FormsAuthentication.RedirectFromLoginPage(objDR("lgn"), False )

    else

    saida.Visible="True"

    saida.text="Usuário/Senha Inválido(s) , tente novamente."

    End If

    Catch ex as Exception

    saida.visible="true"

    saida.text="Ocorreu um erro durante o Login : " & "<p>" & ex.Message()

    Finally

    conexao.Close()

    End Try

    End Function

     

    Sub btn_lgn(Src As Object, E As EventArgs)

    Validausuario(Lgn.Text,Snh.Text)

    End Sub

     

     

    Aonde estou errando, não consegui identificar, preciso de ajuda...

     

    Obrigado

     

    Wender Paderes

    Friday, April 20, 2007 8:48 PM
  • Oi !

     

    Você está passando a variável conexao para o objeto CMD antes de fazer o new do objeto sqlconnection, com isso o CMD não tem de fato uma conexão, já que a variável estava vazia e dai o erro.

     

    Faça, em algum outro ponto antes do executereader :

    Code Snippet

     

    cmd.connection=conexao

     

     Porém se você está usando .NET 2.0 e VS 2005 (e deveria :-) está subestimando os recursos que ele oferece.

     

    Experimente depois criar um site web em branco, ir no menu website->asp.net configuration e configurar a parte de segurança seguindo o wizard.

     

    Depois use o controle de login no seu formulário e veja como é fácil.

     

    []'s

     

     

     

    Friday, April 20, 2007 9:12 PM
  • Dennes,

     

    estou tentando me adaptar ao .Net 2.0, pois há mais de 3 anos não mexo em nada com desenvolvimento web, e não possuo o VS 2005, até agora tudo que fiz foi na mão, estou nesse momento baixando o Visual Web Developer 2005 - Express Edition, será que ele vai me ajudar em alguma coisa?

     

    Wender

    Friday, April 20, 2007 9:20 PM
  • Oi !

     

    Com certeza, tudo que eu citei pode ser feito com ele.

     

    []'s

     

    Friday, April 20, 2007 9:36 PM
  • Ola Wender,

    Veja se o artigo pode te ajudar em algo: http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=62
    Saturday, April 21, 2007 2:08 PM
    Moderator
  • Israel,

     

    Excelente artigo, deu para ter um noção bem ampla, porém utilizar nos padrões originais não se aplica ao meu caso, pois já tenho a base de dados montada e também com dados específicos que o membership da MS não possui, precisaria criar algo adaptado aqui...

    Pelo que pude observar, existe a possibilidade de se fazer algo adaptado, porém, ainda não consegui entender como fazer, tem alguma dica??

     

    Wender

    Wednesday, April 25, 2007 12:00 PM
  • Oi !

     

    O que você está citando costuma ser um engano muito comum após uma primeira análise do sistema de membership do ASP.NET.

     

    Ocorre que o sistema de membership do ASP.NET não foi feito para guardar dados de negócio, dados como endereço, telefone, etc, que você possui na sua base, mas sim para guardar dados de autenticação.

     

    As tabelas do sistema de membership preveem as seguintes situações :

     

    Identificar quando foi a ultima troca de senha do usuário

    Bloquear ou liberar o usuário conforme os erros na digitação de senha

    Identificar número de erros de digitação de senha em determinado intervalo de tempo

    Identificar último login do usuário

     

    Enfim, a base de memberShip é uma base para autenticação e não uma base de usuários. Assim sendo, se você resolve implementar um membership ligado a sua base, durante o caminho você descobre que terá que optar entre adicionar diversos campos na sua base ou cortar funcionalidades de segurança do membership. Então acaba descobrindo que tais campos não são exatamente dados de negócio e era melhor que estivessem separados da base de negócio, como estavam originalmente na base de memberShip.

     

    O ideal seria você utilizar a base de memberShip padrão e personalizar, por exemplo, o CreateUserWizard para poder cadastrar os dados de negócio em sua tabela de negócios simultaneamente ao cadastro do usuário na tabela de autenticação.

     

    Mas se infelizmente ainda não convenci você, então de uma olhada em http://msdn2.microsoft.com/en-us/library/6tc47t75.aspx

     

    []'s

     

    Wednesday, April 25, 2007 1:33 PM
  • Dennes,

     

    eu até entendi o objetivo do membership do ASP.NET.

     

    Porém o que está ocorrendo é o seguinte, eu possuo uma base de dados dos meus clientes (empresas) e junto com esses dados, possuo uma outra tabela relacionada onde tenho os dados dos funcionários, além dos dados que você citou como endereço, telefone, etc, também tenho a classificação de cada um deles, nessa classificação eu tenho, desde a diretores até a vendedores.

    O que acontece é que eu tenho um sisteminha web/intranet aqui de uso interno, porém a coisa tomou vulto e preciso abrir isso a esses clientes, para alguns somente poderão visualizar, para outros, poderão fazer inclusões, alterações, exclusões etc...

    ai é que entra a complicação, a base é toda access, o membership é SQL (posso migrar para o SQL Express que baixei), os dados da empresa será a regra que definirá qual parte do BD cada um pode acessar, pois quem é da empresa de farmácia, só vai acessar a parte de farmácia do BD, quem é de empresa de agronegócios, só acessa agronegocios, e assim sucessivamente, os dados de classificação será a regra que definirá quem altera algo no BD quem é diretor tem acesso ao menu de inclusão/exclusão e edição, quem é vendedor só pesquisa...

     

    É ai que eu estou perdido, pois ainda não consegui exatamente encontrar a forma de implementar isso com o membership do ASP.NET...

     

    Desculpe se estou parecendo cabeça dura, mas preciso esgotar todas as possibilidades antes de ter que refazer toda a parte que já está pronta, pois o sistema internamente roda perfeito...

     

    Wender

    Wednesday, April 25, 2007 2:17 PM
  •  

    Oi, Wender !

     

    Membership é para autenticação. O que você deseja é uma tarefa pós-autenticação, a autorização, ou seja, definir quem pode ver o que.

     

    Então primeira coisa : Use o membership sem medo.

     

    Ai partimos para o segundo passo : Como autorizar os seus usuários. A autorização não é feita pelo membership, mas pelo RoleManager. Talvez você precise de um RoleManager personalizado, veja em http://msdn2.microsoft.com/en-us/library/317sza4k.aspx

     

    Code Snippet
    Context.User.isInRole("nomedoGrupo")

     

     

     

    Isso é tarefa comum para verificar se o usuário está ou não em determinado grupo e definir as permissões dele, o que também pode ser feito com o objeto loginView, lembrando que se o roleManager for personalizado, os grupos serão lidos da sua tabela.

     

    Leia também o artigo em http://www.devaspnet.com.br/colunas/coluna0126.aspx para ver até onde vai esta toca de coelho...

     

    []'s

     

     

    Wednesday, April 25, 2007 2:40 PM
  • Ola Wender,

    Seria isso que está buscando: http://www.linhadecodigo.com.br/artigos.asp?id_ac=1116 ?
    Wednesday, April 25, 2007 9:19 PM
    Moderator