Identity Management de verdade com novo Seam 2.1 Beta
Poxa vida, tava preparando um post sobre RecordProcessor, e sai a versão nova do Jboss Seam ontem, e com ela um novo Identity Manager, e desta vez com suporte a LDAP!!!!
Bem, desta vez vou dividir em mais partes o post, nesta primeira parte vou focar apenas na configuração do Apache Directory Server (LDAP) e na autenticação com seam.
Pré requisitos:
- JBoss Seam 2.1 BETA1
- Apache Directory Studio para eclipse
Configurando o LDAP
Bem, o primeiro passo é criar uma aplicação com Seam, usando o bom e velho seam-gen. Veja este post para maiores informações.
Instale o Apache Directory Studio usando o update-site para eclipse e marque as opções Studio e Directory Server (isso vai lhe permitir iniciar um servidor LDAP de dentro do eclipse)
Bem, com o plugin configurado, abra a perspectiva de Servers do Directory Studio e crie um novo servidor, assim como na figura abaixo:
Inicie o servidor, clique com o botão direito sobre o mesmo, e então LDAP Browser -> New Connection. Isto vai conecta-lo ao servidor de LDAP, na aba esquerda “LDAP Browser” você pode agora criar os usuários e roles.
Bem, vamos criar uma árvore onde abaixo de nosso domain (dc), existe uma Organizational Unit (ou) para users e outra para roles.
Clique com o botão da direita em dc=example,dc=com e depois new entry. Selecione uma nova entrada e na tela de object classes “Organization Unit” e Add…
Na próxima tela no RDN use ou e roles como na figura abaixo:
Bem, agora repita este passo e crie uma ou com nome de users.
Bem, agora é preciso criar um usuário, basta seguir as telas abaixo:
Você deve adicionar os objetos Person e extensibleObject em sua entrada:
Na próxima tela é importante que seu DN fique da seguinte maneira : uid=$USER,ou=users,dc=example,dc=com pois esta é a string de pesquisa usada pelo componente do Seam no LDAP, então adicione apenas uid no seu RDN como na figura abaixo:
Na próxima tela você terá que adicionar dois campos a mais que são obrigatórios (CN=Common Name e SN=Surname) adicione um nome e sobrenome. Além disto, você deve adicionar um atributo member que vai apontar para o role que seu usuário participa.
Para adicionar um atributo clique no ícone mostrado na figura abaixo:
Agora escolha member:
Além disto você vai precisar de um userpassword:
No final, sua entrada deve se paracer com a figura abaixo:
Ok, o usuário esta configurado (a propósito, criei o usuário bob com senha bob
)
Para cada novo role de um usuário, basta adicionar um novo atributo member para o usuário em questão
Agora podemos partir para o seam
Configurando o Identity Management
Configura o identityManagement é muito simples. IdentityManagement é uma classe que delega a um IdentityStore (no nosso caso LDAP), então você precisa configura o ldapIdentityStore e um security-identity-manager
Agora basta adicionar o ldapIdentityStore e security-identity-manager:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <security:ldap-identity-store name="ldapIdentityStore" server-address="localhost" server-port="10389" user-DN-prefix="uid=" user-DN-suffix=",ou=users,dc=example,dc=com" user-context-DN="ou=users,dc=example,dc=com" user-password-attribute="userPassword" role-context-DN="ou=roles,dc=example,dc=com" role-DN-prefix="cn=" role-DN-suffix=",ou=roles,dc=example,dc=com" bind-DN="uid=admin,ou=system" bind-credentials="secret" user-role-attribute="member" user-object-classes="person,uidObject"> </security:ldap-identity-store> <security:identity-manager identity-store="#{ldapIdentityStore}"></security:identity-manager> |
Pronto, você pode inclusive remover seu authenticator agora
O Seam cuida desta nova forma de autenticação para você.
Dos descritores acima quero falar apenas de dois pontos (ta tarde pra caralho e quero dormir :|). Bem, o server-port não existe no XSD do seam, parece ser um bug pois o componente tem o atributo e você pode usar, eu já fui fominha e abri um bug mas podem usar sem problemas. Outro ponto é o atributo enabled que quando usado (nao foi nosso caso), deve ter o valor TRUE e não true, sabe por que? Abaixo um trecho do LDAPIdentityStore
431 | if (LDAP_BOOLEAN_TRUE.equals(value)) return true; |
O valor LDAP_BOOLEAN_TRUE é “TRUE” ou seja, se você usar “true” minúsculo vai levar graxa na cara.
Bom, agora, quando voce acessar sua aplicação e for na tela de login, ja vai estar usando o LDAP. Não precisou mexer em xhtml, nem em classe alguma. Não é uma beleza?
Pessoal, esse post eu fiz questão de varar a noite, primeiro porque só esta feature já é um motivo para vocês usarem Seam, segundo porque sou fominha e queria postar antes de qualquer um
O próximo post vou continuar daqui, vou mostrar como usar o IdentityStore para adicionar users via web no LDAP (sem você escrever uma linha de código), como funciona o novo mecanismo de permissions e como mesclar LDAP e banco de dados para armazenar permissions no banco de dados.
Inté









