Você está na página 1de 11

A sabedoria numa corrida de canoas Colabore com uma internet mais saudvel: antispam.

br

Pesquisar

Autenticao e Autorizao: JAAS com JDBC Realm


DAT-Autenticao em cloud
Single Sign-on e Autenticao forte em cloud computing. www.dedalus.com.br/dat

ADS

3.280 videoaulas NERI


FLEX,JAVA, j2me, jsp,delphi,oracle php Aulas c/ prof Ps-Graduado www.informaticon.com.br/

Recentemente ministrei um curso sobre Segurana em aplicaes JavaEE, onde, grande parte do treinamento a utilizao e configurao do JAAS (Java Authentication and Authorization Service) abordando Basic e Form Authentication usando os realms : File, JDBC e LDAP. Aproveitando o embalo do treinamento e principalmente pela empolgao dos alunos da turma quando viram quo simples e fcil usar o JAAS, vou mostrar a configurao de autenticao e autorizao em uma aplicao JavaEE usando Basic Authentication e JDBC Realm . O JAAS (Java Authentication and Authorization Service) a API padro do Java para controle de acesso e autorizao em aplicaes JavaEE. Com JAAS possvel autenticar e validar usurios e certificados, bem como controlar a possibilidade de acesso e/ou utilizao de recursos na aplicao (arquivos, diretrios, URLs, contedo, etc). Resumidamente o JAAS cuida de: Autenticao: deve verificar se um usurio ele mesmo atravs de validao de senhas e/ou certificados. Autorizao: com base em um usurio identificado, as regras e controles de permisso e acesso sero aplicadas na aplicao/produto e seus recursos. O exemplo a seguir foi feito usando o Eclipse, Glassfish_v2 e MySQL, e no h nenhum segredo obscuro, simplesmente criaremos um Dynamic Web Project e usaremos o console do Glassfish para criar o realm.

www.insite.com.br

Anncios Go

TAGS

Agile
Blog

Agile-ES

BDD

Eclipse
Giran
Hibernate

Desenvolvimento

Caelum
EJES

CEJug

Falando.em.Java

Eventos

ESJUG

Gerncia
GUJ

globo.com

Liderana Linux Mac Metodologias Netbeans

Java

IDE

iPhone Lder

A infra-estrutura (servidor e banco de dados)


O ponto chave para a configurao do JDBC Realm o banco de dados (tabelas de usurio e grupos). Criaremos o schema com o SQL a seguir. Basicamente so apenas duas tabelas: usertable e grouptable.

Projetos Ruby

Off-Topic Palestras Pessoal PHP

Portal Java

Python

Rails

SCRUM
TDD
Tutoriais
Web2.0 Wordpress

Segurana

Testes
Ubuntu
WTF XP

CATEGORIAS
Agile (13) Carreira (4) Desenvolvimento (34) A configurao do schema no realm ser feita adiante e este exemplo Erlang (1) est simples desta forma apenas para ficar o mais claro possvel na Eventos (37) configurao do realm. Certamente no seu caso voc j ter suas Gerncia (9) tabelas de usurios e grupos e para us-los basta fazer a Giran (5) configurao do realm de acordo com a sua realidade, alterando os Java (59) valores das propriedades de configurao. App Servers (2) Applets (1) Certificaes (2) 1 CREATE DATABASE learn_jaas; 2 USE learn_jaas; Eclipse (5) 3 CREATE TABLE usertable(userid VARCHAR(10) PRIMARY KEY, password VARCHAR ESJUG (15) 4 CREATE TABLE grouptable(userid VARCHAR(10), groupid VARCHAR Netbeans (1) 5 ALTER TABLE grouptable ADD CONSTRAINT FK_USERID FOREIGN KEY Portal Java (2) 6 COMMIT; Liderana (2) Linux (11) Metodologias (9) Off-Topic (20) Pessoal (51) Blog (7) Palestras (20) Viagens (6) Produtividade (1) Projetos (7) Python (4) Refactory (1) Ruby (5) Segurana (5) Testes (10) WTF (5)

E agora vamos inserir alguns usurios e grupos para os testes, conforme o SQL abaixo. Os usurios sero: user , guest e admin e os grupos sero: users , e admins . Reparem que os grupos esto no plural, enquanto os usurios esto no singular. Este um importante detalhe, a seguir, na configurao das roles usaremos os grupos para aplicar as regras e no os usurios. 1 2 3 4 5 6 INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO usertable VALUES ('user', 'user'); grouptable VALUES ('user', 'users'); usertable VALUES ('guest', 'guest'); grouptable VALUES ('guest', 'users'); usertable VALUES ('admin', 'admin'); grouptable VALUES ('admin', 'admins');

Com o banco de dados pronto ainda precisamos de um passo antes do realm, precisaremos criar agora o Connection Pool e o DataSource para este banco de dados. O JNDI Name deste DataSource ser usado na criao do realm, portanto, este passo essencial para o funcionamento do exemplo. Entretanto, como o foco aqui no a criao do DataSource , darei apenas o JNDI Name conforme usei no exemplo: learn-jaas-jdbc. Agora s precisamos criar o realm, o nome usado para ele ser learnjaas-realm. No console do glassfish vamos em: Configuration >> Securiy >> Realm >> New. As propriedades devero ser preenchidas de acordo com a imagem e a tabela abaixo (se o seu schema for diferente s ajustar os valores):

MEUS LTIMOS TWEETS

Jeveaux

582 followers
impresso minha ou agora o google est empurrando os posts do #buzz para os

compartilhados do #reader? #fail


about 6 hours ago

Propriedade jaas-context datasource-jndi user-table user-name-column password-column group-table group-name-column digest-algorithm

Valor jdbcRealm learn-jaas-jdbc usertable userid password grouptable groupid none

RT @marevix: Estamos chegando aos 100 inscritos! J garantiu a sua vaga? http://tinyurl.com/3xydu3e Inscreva-se, as vagas so limitadas.
about 6 hours ago

Isso que eu chamo de "flagrante" http://tinyurl.com/2v3v27k No acredito, s pode ser combinado.


about 7 hours ago

A aplicao
Com a infra-estrutura necessria criada e funcionando, partiremos para a aplicao. Este ser um ponto bem simples, a aplicao no ter nada alm de 4 pginas JSP , web.xml e sun-web.xml . No Eclipse, criaremos um Dynamic Web Project usando o glassfish como servidor (JavaEE 5). As pginas citadas anteriormente ficaro dispostas conforme o projeto abaixo:

RT @marevix: http://ow.ly/1Dkh4 Domain-Driven Design - Por @denisferrari #MareVix #DDD #Agile #Comunicacao
about 8 hours ago

Tem um novo integrante do time da #giran que tem dois #easteregg: http://tinyurl.com/nbfpt4 Quem descobre?
about 9 hours ago

RT @marevix: http://ow.ly/1Dk8x Um produto em duas semanas! - Por @guilhermecaelum #Marevix #Scrum #Agile #PMI
about 10 hours ago

Em cada pgina index.jsp dos diretrios admin , public e users h um dizer assim: Welcome Admin! ; Welcome Guest! ; Welcome User! ; respectivamente. E em /index.jsp h apenas os links para as demais pginas. Estes diretrios sero protegidos posteriormente.

RT @vraptor3: VRaptor 3.1.2 Lanado! Changelog: http://tinyurl.com/vr3clog Download: http://tinyurl.com/vr3dw


about 11 hours ago

RT @marevix: Pessoal de #Vix, dia 29/05 tem o #MareVIX! No

O prximo passo consiste na criao das roles em nossa aplicao. Este costuma ser o ponto onde os iniciantes se confundem muito, por isso houve aquela distino entre os nomes dos usurios e os grupos anteriormente. A criao das roles livre, podemos cri-las como bem entendermos, o nico ponto de ateno aqui que a role associada ao grupo, ou seja, uma role ser aplicada para todos os usurios de um determinado grupo. Ento, em WEB-INF/sun-web.xml criaremos as roles associadas com os seus respectivos grupos: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <security-role-mapping> <role-name>user-role</role-name> <group-name>admins</group-name> <group-name>users</group-name> </security-role-mapping> <security-role-mapping> <role-name>admin-role</role-name> <group-name>admins</group-name> </security-role-mapping> <security-role-mapping> <role-name>guest-role</role-name> <group-name>admins</group-name> <group-name>users</group-name> <group-name>guests</group-name> </security-role-mapping>

percam! http://ow.ly/1DkrM #TDD #DDD #Scrum #Agile


about 13 hours ago

LTIMOS COMENTRIOS
Victor Honorato em Mar de Agilidade em VitriaES: Mar Vix Autenticao e Autorizao em Aplicativos Web :: Tutoriais CTDO - Sua Base de Tutoriais Online em Autenticao e Autorizao: JAAS com JDBC Realm Mar de Agilidade em Mar de Agilidade em Vitria-ES: Mar Vix Maxwell Leonardo em Mar de Agilidade em Vitria-ES: Mar Vix Gabriel M. Barboza em Mar de Agilidade em Vitria-ES: Mar Vix Makoto Hashimoto em Mar de Agilidade em Vitria-ES: Mar Vix Tagliati em Mar de Agilidade em Vitria-ES: Mar Vix Edgar Muniz Berlinck em Mar de Agilidade em Vitria-ES: Mar Vix iMasters em Mar de Agilidade em Vitria-ES: Mar Vix Junior moreira em Mar de Agilidade em VitriaES: Mar Vix Alessandro Dourado em Mar de Agilidade em Vitria-ES: Mar Vix webcapixaba em Mar de

As roles foram criadas com o sufixo -role apenas para ficar bem claro que so roles e no usurios ou grupos. Vejam que as roles esto associadas aos grupos e no aos usurios. Este um momento onde aplicaremos as regras hierrquicas e organizacionais da empresa, repare que o grupo admins aparece em todas as roles, afinal de contas, no queremos barrar ao administrador do sistema o acesso s pginas pblicas ou de usurios, certo? Prximo passo: Configurao do web.xml ! A configurao da autenticao em si no passa de 4 linhas de xml, informaremos o tipo (mtodo) de autenticao (pode ser none , basic , form e digest/certificate ) e qual o nome do realm associado: 1 2 3 4 <login-config> <auth-method>BASIC</auth-method> <realm-name>learn-jaas-realm</realm-name> </login-config>

O que precisaremos agora , com base nas roles, criar as regras de acesso na aplicao. Elas podem ser feitas de vrias formas e como podemos usar URL Pattern para definir onde a regra ser aplicada, faremos isso por diretrios, combinando os diretrios com as roles (admin, user e guest):

Agile no Mundo Real <security-constraint> Alberto Leal <web-resource-collection> Alisson Vale <web-resource-name>paginas para visitantes</web-resource-name <url-pattern>/public/*</url-pattern> Almir Mendes <http-method>GET</http-method> Anselmo Alves <http-method>POST</http-method> Antoni Carlos Silveira </web-resource-collection> Azambuja Blog da Caelum <auth-constraint> <role-name>guest-role</role-name> Boaglio </auth-constraint> Bruno AbstractJ </security-constraint> Bruno Carvalho CV Repare que o cdigo ficou grande, mas muito repetitivo. Os pontos Daniel Quirino de ateno so o elemento url-pattern, onde gerada a regra para Fernando Meyer onde as restries sero aplicadas e, principalmente, o elemento roleFrancisco Souza name, onde definimos qual a role est associada com aquela regra. Franklin Samir Mais uma vez repare que a regra de acesso associada role , j a Guilherme Chapiewski role , por sua vez est associada com um grupo, que por sua vez est Guilherme Cirne associado com um usurio. Guilherme Silveira Juliano Carniel Agora s fazer o deploy e executar o projeto. Lembre-se das senhas Lo Hackin (ou consulte no banco de dados) e faa o teste de acesso em cada Loiane Groner pgina. Loiane Groner (en_US) Para facilitar disponibilizei o projeto para download, basta clicar aqui. Loiane Groner @ (por algum motivo alheio a minha compreenso o wordpress no DeveloperWorks deixou o nome do arquivo igual ao original, ento, baste colocar um Louds ponto antes do tar, deve ficar project-to-learn-jass.tar.gz) Luca Lucas Teixeira 3 retweet

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

webcapixaba em Mar de <security-constraint> Agilidade em Vitria-ES: <web-resource-collection> Mar Vix <web-resource-name>paginas admnistrativas</web-resource-name Carlan Calazans em Mar <url-pattern>/admin/*</url-pattern> <http-method>GET</http-method> de Agilidade em Vitria<http-method>POST</http-method> ES: Mar Vix </web-resource-collection> Edgar Muniz Berlinck em Mar de Agilidade em <auth-constraint> Vitria-ES: Mar Vix <role-name>admin-role</role-name> </auth-constraint> csantanaes em Mar de </security-constraint> Agilidade em Vitria-ES: Mar Vix <security-constraint> <web-resource-collection> <web-resource-name>paginas para usurios</web-resource-name <url-pattern>/users/*</url-pattern> ARQUIVOS <http-method>GET</http-method> <http-method>POST</http-method> Selecionar o ms </web-resource-collection> <auth-constraint> <role-name>user-role</role-name> </auth-constraint> </security-constraint>

BLOGS

Tags: Desenvolvimento, Eclipse, Glassfish, JAAS, Java, Realm, Segurana


Este Compartilhe! texto foi publicado em 13 de janeiro de 2009 s 22:53, e est categorizado em Desenvolvimento, Eclipse, Java, Segurana. Voc pode acompanhar os comentrios desse post atravs do feed RSS 2.0. Deixe um comentrio ou trackback.

TRACKBACKS (7)

POSTS RELACIONADOS

#1 escrito por Rafael Carneiro 15 de janeiro de 2009 - 23:51 Parabns pelo artigo Jev. muito bom para a comunidade Java brasileira possuir um artigo de alto nvel sobre JAAS. #2 escrito por Rogrio 21 de janeiro de 2009 - 12:48 Parabns a dias procurando material. No havia encontrado nada bem claro. J havia entendido todo o funcionamento do JAAS porm no conseguia implementar nada. E o Logout ? #3 escrito por jeveaux 21 de janeiro de 2009 - 13:01 Ol Rogrio, obrigado pelo feedback. Sobre o logout, voc pode fazer de maneira programtica usando o mtodo logout da classe LoginContext. Abrao #4 escrito por Diego Prates 14 de fevereiro de 2009 - 14:14 possvel definir as roles em banco de dados tb?? para no precisar definir estticamente em um arquivo xml, pois minha aplicao necessita possiblitar que o administrador possa definir regras de acesso para os usurios. Obrigado #5 escrito por sebastiao

Lucas Teixeira (en_US) Makoto Marcos Sousa Natanael Pantoja Plentz Rafael Carneiro Rafael Steil Reinaldo Junior Rodrigo Cansian Rodrigo Yoshima (Aspercom) Shoes Tiago Motta Tiago Peczenyj Urubatan Viso gil Vitor Pellegrino Washington Botelho

LINKS
Agile ES Caelum Efetividade ESJUG Giran Solues e Ensino GUJ InfoQ BR PortalJava

META
Login Posts RSS RSS dos comentrios WordPress.org

16 de fevereiro de 2009 - 15:26 Sobre o logout, voc pode fazer de maneira programtica usando o mtodo logout da classe LoginContext. Tambm estou procurando algo sobre o logout. Mas toda referncia que encontro session.invalidate(). Mas como o LoginContext.logout() seria executado ? Alguns outros servidores como o Websphere adicionam cookies (ltpa) que inviabilizam o session.invalidate() como soluo de logout. Abrao #6 escrito por jeveaux 16 de fevereiro de 2009 - 15:43 @sebastiao O session.invalidate() voc poder usar quando estiver, de alguma forma, fazendo o login/logout do usurio de forma manual, trabalhando com algum objeto na sesso. Para garantir melhor voc remover diretamente o objeto da sesso, desta forma voc no correr riscos. J o logout mencionado, da LoginContext, voc usar quando estiver trabalhando com autenticao atravs de JAAS. #7 escrito por sebastiao 19 de fevereiro de 2009 - 16:29 Jeveaux, Acho que no fui claro. Quando programei meu LoginModule, implementei tambm um mtodo logout(). Quando fao logout na minha aplicao Web usando JAAS, a nica coisa que fao invalidar a sesso e invalidar os eventuais cookies ltpa do WAS. A questo quando o mtodo logout() do meu LoginModule ser disparado ? necessrio disparar ? No fica lixo em memria dessa forma ? Eu deveria alm de invalidar a sesso e cookies, de alguma

forma disparar LoginContext.logout() ? Como ? Abrao #8 escrito por Luiz Taborda Bukowski 27 de fevereiro de 2009 - 17:06 Fala Jeveaux, blz? timo post, simpro de tudo, por isso mesmo muito fcil de entender. Cara sempre que vejo um tutorial sobre jaas as permisses nas pginas ficam no web.xml, e se eu quiser manter isso no banco? entendeu minha dvida? Outra coisa e pra controlar acesso uma parte do cdigo, como por exemplo um campo, ou um link? #9 escrito por jeveaux 27 de fevereiro de 2009 - 17:24 @Luiz e @Diego Sobre armazenar as roles em banco de dados, creio que no h nada default pra isso. D pra usar um arquivo de policy com o controle de autorizao, isso d sim. Mas nada impede que implementemos um novo LoginModule para usar o banco de dados. @Sebastiao Voc pode disparar o logou junto com o invalidate, no teria problemas. Mas estranho, pois ao fazer o invalidate os cookies deveriam ser eliminados completamente e, com isso, a autenticao seria perdida. @Luiz Sobre a exibio de componentes na pgina de acordo com a permisso do usurio vai depender de que framework de view que voc est usando, se no houver suporte a JAAS voc vai ter que fazer manualmente. #10 escrito por renan 17 de julho de 2009 - 10:30 Existe uma maneira de usarmos chaves primarias substitutas como idUsuario e idGrupo ao inves de usarmos os nomes (que no caso sao chaves naturaris) ?

grande abrao #11 escrito por Leandro 3 de dezembro de 2009 - 12:36 Jeveaux, exelente contedo,parabns e obrigado! Eu precisarei autenticar usando informaes de mainframe. Existe Realm para mainframe ao invs de jbdcRealm? Outra coisa que notei que no no fala se application ou container.Sendo assim, por default esta autenticao no seria gerenciada pelo container,certo? me perguntei, como pode haver a configurao do realm no glasfish se no autenticado por container?Fiquei confuso. Obrigado. #12 escrito por jeveaux 4 de dezembro de 2009 - 13:40 Ol Leandro, Eu no conheo nenhum realm que possa ser utilizado diretamente com mainframe no =( Talvez (muito talvez), e ainda dependendo de qual mainframe for possa ser que existe algum conector ou algo do tipo para facilitar na comunicao, mas realmente eu no conheo praticamente nada nessa rea, no posso ajudar muito. #13 escrito por Danilo Magrini 28 de janeiro de 2010 - 22:03 A documentao da Sun sobre JAAS uma merda, j li tudo que voc imagina e ainda no entendi qual a dele. Entra as dvidas, quando uso LoginModule com CallbackHandler ou quando devo fazer diretamente no AS como noseu exemplo? #14 escrito por Leandro 1 de fevereiro de 2010 - 13:24 jeveaux, no final das contas descobri que no precisarei fazer um realm para mainframe. O que meu cliente faz carregar um ldap com as informaes do mainframe e ento a aplicao obtm desterepositrio.

Ficou mains fcil,certo?rsss Grato pela ateno. #15 escrito por Danilo Magrini 12 de abril de 2010 - 18:02 u.. mas como a aplicao passa o usurio que dever ser autenticado pelo jaas? #16 escrito por Sebastiao 12 de abril de 2010 - 18:09 Pelo que aprendi no decorrer de muito sofrimento, responsabilidade do servidor fazer o logout no container J2EE. Cada um faz de uma maneira, no JBoss voc precisa invalidar a sesso, no Websphere, dependendo da configurao, voc precisa invalidar ou excluir um cookie ltap2, e por a vai. Abrao, #17 escrito por Sebastiao 12 de abril de 2010 - 18:09 Ops, o cookie correto ltpa2.

Nome (obrigatrio) E-mail (obrigatrio, no ser publicado) Website

Quero receber notificaes por e-mail sobre este post.


Enviar

Copyright 2010 Jeveaux's Weblog RSS FEEDS