Implementan do uma aplicação java segura utilizando JAAS. Introdução Neste document o mostrarei como desenvolver uma sim ples aplicação utilizando JAAS ( Java Authentication and Authorization Service) e um pouco de JQuery para realizar a validação de al guns campos. As tecnologias utilizadas serão: – JDK 5.0 Update 22 e NetBeans 6.5.1 www.sun.com.br– MySql 5.0 http://dev.mysql.com/downloads – TomCat 6.0.18 (Instalado juntamente com o NetBeans)
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Com seu JDK e NetBeans já instalado , vamos começar criando um novo
projeto clicando com o botão direito na aba lateral “projetos” e em seguidaselecionando “Java Web” e depois “Aplicação Web” ou então através do menu“Arquivo” e “Novo Projeto”.
Então de um nome a sua aplicação, com a inicial maiúscula preferencialmente e clique em “Próximo”.
Se preferir altere o “Caminho do contexto” que será o nome que seráexibido na URL quando executar sua aplicação.
Então você terá um projeto ao menos parecido com este...
Então vamos dar uma organizada na disposição dos diretórios para que possamos dar andamento no projeto.
Crie três (3) diretórios dentro de “Páginas Web” com os nomes: “jsp”,“admin” e “user”, por fim mova a página “index.jsp”, que foi geradaautomaticamente pela IDE, para o diretório “jsp”.
Obs: Não tente ainda executar seu projeto, configuraremos o “web.xml”em instantes.
Veja o que fizemos até agora:
Agora criaremos algumas outras páginas, clicando sobre o diretório dedestino e selecionando “Novo JSP”.
Crie as páginas de forma que fiquem desta maneira:
Dentro do diretório “WEB-INF” você encontrará um arquivo chamado“web.xml”, ele é responsável pelo mapeamento dos recursos de toda suaaplicação, e como alteramos o local da página “index.jsp” precisamos alterar também seu mapa. Veja:
Então execute seu projeto, para conferir se tudo está funcionandocorretamente, em caso positivo, você verá o tão famoso “Hello World !” em seu browser padrão.
Agora, um pouco de JAAS
O JAAS ou “Java Authentication and Authorization Service” é compostode um conjunto de API's para distinguir definitivamente a camada de segurançada camada de aplicação, retirando assim a responsabilidade do desenvolvedor de manter filtros e ou quaisquer outros métodos de forma programática.
Diz-se que este é um tipo de segurança declarativa, pois, são apenasdeclaradas as restrições no arquivo “web.xml” de sua aplicação e no“server.xml” do servidor web, que em nosso caso é o Apache Tomcat.
Para economizar um pouco de digitação, vou usar uma referência muito
boa retirada do site http://jspbrasil.com.br/mostrar/28 , do autor Gleydson Lima([email protected]).
Segue o trecho com fonte em itálico...
Conceitos Importantes
Para o bom entendimento da segurança no J2EE é necessário que conheçamos algunsconceitos importantes. Os conceitos mais importantes são o de role, user, group e realm.
•
Role: Um role é um nível de permissão. Usuários podem ter roles diferentes e com acessosdiferentes. Por exemplo, um sistema de gestão da empresa poderia ter os roles:
• Funcionário
• Gerente
• Diretor
• Fornecer
Cada ator interage com o sistema com níveis de permissões diferentes. Um Gerente e o Diretor têm acesso ao módulo de folha de pagamento, no entanto o Fornecedor e
Funcionário não.Um role representa, em níveis práticos, o papel que o usuário tem no domínio da empresa.
Provavelmente, no domínio do negócio o funcionário não tem acesso a folha de pagamentoda empresa. Isso deve se refletir no sistema.
• User: Um usuário representa uma entidade com acesso ao sistema. O nível de acesso desseusuário vai depender do seu role.
O usuário claudio pode ter o role Gerente e o usuário marcos o role Funcionário.
Assim, no acesso ao sistema, o usuário claudio quando tentar acesso o módulo de folha de pagamento não será barrado pelo servidor de aplicações, permitindo assim que ele possa
acessa-lo. Porém, se o usuário marcos tentar realizar a mesma operação o servidor deaplicações irá emitir um erro de segurança e não permitirá que se tenha acesso ao módulo.
• Group: Um grupo é associado com um conjunto de roles e todo usuário que é membro do grupo automaticamente herda os roles associados.
Por exemplo, podemos criar um grupo denominado Gerencia. Os roles pertencentes ao grupo Gerencia serão Gerente e Diretor. Se colocarmos o usuário carlos pertencente ao grupo Gerencia, ele herdaria automaticamente todas as permissões do role Gerente e Diretor.
• Realm: Um conjunto completo de usuários, roles e groups normalmente armazenados emalgum banco de dados.
Existem vários tipos de Realm. Podermos guardar as informações de segurança em um servidor de diretórios LDAP ou NIS, em arquivos de configurações ou em um banco de
Os roles são níveis de permissão que normalmente são associados com partes de URL que possuem acessos diferentes. Por exemplo, podemos dar acesso a URL
http://www.empresa.com.br/folha-pagamento para somente usuários que possuam o role de diretor e http://www.empresa.com.br/contra-cheque para usuários que possuam o role de funcionário.
Dessa forma os usuários que possuem o role funcionário não possui acesso à área dediretor.
Por exemplo, podemos definir esses roles no arquivo web.xml da aplicação, como mostra oexemplo abaixo:
<security-role>
<description>Diretor da Empresa</description>
<role-name>diretor</role-name>
</security-role>
<security-role>
<description>Funcionário da Empresa</description>
<role-name>funcionario</role-name>
</security-role>
Agora precisamos fazer um mapeamento de usuários com os roles, normalmente em
nível de descritores isso é feito em deployment descriptores específicos do servidor, no casodo tomcat é o conf/tomcat-users.xml.
Dessa forma o role empregado passa um link para o role funcionario.
Configurando o acesso a recursos Web
A configuração da segurança declarativa será dada no deployment descriptor (web.xml) daaplicação e basicamente por três tags XML:
• <login-config>: Configura qual será o modo de requisitar a autenticação ao usuário e dequal realm o servidor de aplicações irá buscar informações.
• <security-constraint>: Usada para configurar os acessos a um conjunto de recursosatravés de mapeamento de URL.
• <security-role>: Representa um conjunto definido de grupos de realm.
Security Constraints
As security constraints determina quem é autorizado a acessar um conjunto de padrões deURL juntamente com seus métodos de acesso (POST ou GET). Caso você defina um securityconstraint para uma determinada URL o container só permitirá acesso a essa URL através de umusuário autenticado e com o role específico. Caso um outro usuário não autenticado tente acessar o conteúdo, o servidor irá tentar autenticar este usuário.
Autenticação de Usuários Existem basicamente cinco tipos de autenticação de usuários como listado abaixo:
• Nenhuma: Usuário não é autenticado.
• HTTP Basic Authentication (<auth-method>BASIC</auth-method>): Este método deautenticação faz com que o browser solicite usuário e senha para autenticação através deum formulário proprietário do próprio browser.
• Form-based Authentication (<auth-method>FORM</auth-method>): Este método permiteao usuário mostrar uma página JSP que será o formulário de autenticação como tambémuma página padrão de erros.
Toda às vezes que os recursos configurados forem acessados e houver a necessidade deautenticação o formulário login.jsp será exibido.
• Client-certificate authentication (<auth-method>CLIENT-CERT</auth-method>): Este é ométodo mais seguro de autenticação usando SSL e esquemas de troca de certificados para
autenticação.• Digest Authentication(<auth-method>DIGEST</auth-method>): O método DIGEST é
parecido com o BASIC e FORM, porém as informações de password são enviadascriptografadas através de algum algoritmo de hashing. Dessa forma a senha trafegacriptografada mesmo em canais não seguros.
Exemplo de uma configuração de web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
Voltando a nosso projeto, decidi criar um JDBCRealm para coisa ficar mais interessante ao invés de guardar as informações em arquivos no servidor.
Vamos começar criando o banco que iremos utilizar, utilize seu editor preferido para realizar esta tarefa, vou mostrar um exemplo de desenho de BDque fiz, não sou muito bom com isso, mas, funcionou...
create table usuarios(usu_login varchar(20) primary key,usu_pass varchar(50) not null,usu_nome varchar(50) not null,usu_email varchar(100) not null
) engine= InnoDB;
create table papeis( pap_descricao varchar(20) not null, primary key (pap_descricao)
) engine= InnoDB;
create table usupap(usu_login varchar(20) not null,
definidos, “manager” obrigatório na maioria das versões do Tomcat (acho que liisto em algum lugar...) e “user” que é nosso usuário comum e também doisusuários “admin”e “user” com seus respectivos papéis e senhas. Neste casocada usuário tem apenas um papel, mas poderiam ter quantos fossemnecessários, mas para nossa ilustração, um para cada já é o bastante.
Agora no NetBeans selecione a aba “Serviços” e em seguida o item“Servidores”, clique com o botão direito do mouse sobre “Apache Tomcat” eselecione “Editar server.xml”.
Adicione este trecho seu arquivo “server.xml”. Atenção a“connectionURL” pois ela pode variar dependendo da sua configuração. OBS:Localize uma tag “<Realm..” , deve ser abaixo da mesma.
Mais informações em: http://tomcat.apache.org/tomcat-5.5-doc/realm-howto.html
Reinicie o servidor, isto pode ser feito através do botão “Reiniciar servidor” na parte lateral esquerda da aba inferior do próprio NetBeans. Veja:
A partir de agora caso seja solicitado identificação para que possa efetuar a construção ou execução do projeto, você deve inserir “admin” para usuário esenha, já que este é o role administrador do Tomcat, como definimos no bancode dados.
Usaremos o método “FORM” para a autenticação então temos que editar nossa página de login para que fique dentro do padrão exigido para tal.
<div id="msg"><h1>Você não tem permissão para acessar este
recurso.</h1></div>
</div></body>
</html>
As páginas com restrição de acesso podem ser formatadas da forma quevocê achar melhor são elas: “restricted.jsp” (poderia ser uma página de administração) e a outra
“allowed.jsp” (destinada a um usuário específico).Bem, até aqui já criamos o banco de usuários e permissões, configuramos
o servidor, criamos as páginas de login e erro e já sabemos quem pode acessar qual página... nós sabemos mas a aplicação não, então vamos voltar ao nossoarquivo “web.xml”.
Suas configurações devem ser muito parecidas a esta:
Defimos então que o método de autenticação será o “FORM”, quesomentes os usuários com role “manager” poderão acessar as páginas dodiretório “/admin” e que somente os usuários com role “user” podem acessar odiretório “/user” e seu conteúdo.
Criei uma página de login apenas com dois links um para a página contidano diretório “admin” e outro para a página do diretório “user”.
A permissão é mantida na sessão então para alternar entre os tipos“manager” e “user” você tem duas alternativas: criar um “logout”invalidando asessão ou reiniciar seu browser.
Note que informamos que todas as páginas de nossa aplicação utilizarão
conexão segura, eta não é uma prática muito performática levando emconsideração o tráfego de rede, então tente aplicar isso somente onde érealmente necessário.
Quando executar sua aplicação é possível que seja solicitado para queadicione um exceção de segurança em relação ao certificado que criamos, jáque ele não é assinado por uma entidade certificadora.
Depois de adicionada a exceção, observe que o canto da barra denavegação do browser muda de formato, veja: