Autenticação ( Authentication ) x Controle de Acesso ( Access Control )

7 respostas
J

Olá a todos, venho neste tópico lançar uma questão importante em grande parte dos sistemas que é a autenticação e o controle de acesso. Para este problema já vi inúmeras soluções desde aplicações desktops em VB e Delphi e mesmo aplicações web sem framework e com framework (CakePHP). Gostaria de saber quais as soluções aplicadas em J2EE e mesmo técnicas utilizadas independente da tecnologia mas a idéia envovlida por tras.

É isso!!

PS.: Quem sabe desta idéia venha à tona uma complementação de um framework como o mentawai ou vRaptor. Tenho tido bastante sucesso com a utilização deste último.

7 Respostas

orlandocn

http://java.sun.com/developer/JDCTechTips/2001/tt0727.html#tip1

J

Bem, gostaria de saber a opinião dos meus nobres colegas quanto à indicação anterior, casos de sucesso ou não.

Existem algumas estruturas mais caseiras como por exemplo:

  1. usar um vetor binário no qual cada posição representa um caso de uso e associar esta permissão a um usuário no momento do seu cadastro. Esta solução é pouco mantenível assim como outras em que é criada uma tabela com todos os casos de uso do sistema na forma de atributos e a cada novo caso de uso acrescenta-se um novo atributo na tabela ( :? )

Os problemas que estas soluções buscam resolver são dois: o primeiro que é o mais grave que é permitir o acesso somente àqueles que o têm de fato e o outro é apresentar a interface gráfica de acordo com estas permissões (exibir esta ou aquela função ou todas)

O que meus nobres colegas têm a dizer a respeito.

[]'s

P

Autenticação: problema do container, ajustado conforme a necessidade no login-config

Autorização no nível de caso de uso:

  1. Defino tantos roles quantos necessários. No limite, isto significa um role por caso de uso.

  2. Uso security-contraints (preferencialmente) ou filtros (ex. caso de uso especificado por um parâmetro) e métodos padrão( isUserInRole() ) para limitar o acesso do usuário. apenas ao que tem direito.

D

Cara, implementei este procedimento aqui na empresa, utiliza alguns cadastros, tais como:

MóduloSistema - Neste ponto eu cadastro possíveis módulos(Financeiro, RH, etc)
MóduloMenu - Cadastro as páginas pertencentes à um Sistema(Neste momento conseguimos montar o menu dinâmico)
MóduloPermissões - Cadastro de permissões por sistema(Genérico, tais como: Inclusão, Alteração, GravarEstadoEspecial, etc…)
MóduloUsuários - Cadastro padrão de usuário com login e senha

MóduloAgrupamento - Cria um grupo “GRUPO MASTER” onde são associadas as permissões “Inclusão”, “Alteração”. Também neste momento efetuo a associação das Páginas. Sendo assim teremos a tabela:

GRUPO MASTER

GRUPO MASTER x TELA.jsp X RH_0001CAD
GRUPO MASTER x TELA.jsp X RH_0002_UPD
GRUPO MASTER x TELA.jsp X RH_0003_VIEW

Depois podemos associar um Grupo ao Usuário, ficando:

GRUPO MASTER x USUARIO1

O Join final ficaria desta forma:

USUARIO1 X RH_0001CAD
USUARIO1 X RH_0002_UPD
USUARIO1 X RH_0003_VIEW

Depois crie views para representação da estrutura do JAAS, join simples e criei o mapeamento em um LoginModule.

A definição de ação no FrontController foi encapsulada para capturar de forma dinâmica as permissões da página corrente e o procedimento de autorização é efetuado através da comparação das permissões do usuário através do request.isUserInRole

Isso é apenas uma simples abordagem sobre o modelo de implementação adotada, neste projeto foi utilizado JSF com JPA e o provider foi o Hibernate.

J

Alguns achados sobre autenticação.

http://www.netbeans.org/kb/articles/security-webapps.html#indexpage
http://www.developinjava.com/readarticle.php?article_id=5

saoj

É complicado pensar num esquema de autoriação que seja genérico e flexível o suficiente para atender todos os casos.

Grupos e Permissões, sendo que um usuário pode pertencer a N grupos e possuir N permissões, parece bom, mas não é suficiente para alguns casos.

No Mentawai o que fizemos na última versão é introduzir a autorizaçao dinâmica e programática, ou seja, a cada requisiçao um método é executado aonde vc pode fazer qualquer tipo de checagem para saber se o cara vai estar autorizado ou não, ou seja, vc pode autorizar um cara com cueca azul, e 34 anos para acessar determinada área do seu site.

J

Olá, mais sobre autenticação e controle de acesso:

http://www.javafree.org/javabb/viewtopic.jbb?t=855399

Criado 1 de fevereiro de 2007
Ultima resposta 3 de fev. de 2007
Respostas 7
Participantes 5