Na época em que trabalhava na Red Hat, eu participava do grupo que era responsável por responder questões relacionadas a Security. Isso envolvia basicamente duas coisas: PicketBox e PicketLink.
Para quem não sabe o PicketLink é uma solução de IDM que está sendo construida (está em constante evolução) para antender a plataforma JBoss. IDM (Identity Management) descreve o gerenciamento de identidades individuais, sua autenticação, autorização e privilégios/permissões dentro de um contexto de segurança.
Exemplos de IDMs concorrentes do PicketLink:
IBM - http://www-01.ibm.com/software/tivoli/products/identity-mgr/
Oracle - http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.htm
Uma das perguntas mais frequentes e que até eu mesmo me fazia antes de conhecer o PicketLink mais a fundo é: Qual é a referência entre o PicketLink e o PicketBox?
O Picketbox (implementa o JAAS) é API que sustenta quaquer implementação de segurança dentro do JBoss Application Server (JBoss AS). O PicketLink está em cima dessa camada e tem como objetivo fornecer diversas soluções para gerenciamento de identidade.
PicketLink - http://www.jboss.org/picketlink
PicketBox - http://www.jboss.org/picketbox
Além do IDM o PicketLink agrupa vários projetos por exemplo:
- IDM: Provide an object model for managing Identities (Users/Groups/Roles) and associated behavior using different identity store backends like LDAP and RDBMS.
- Federated Identity: Support SAMLv2, WS-Trust and OpenID.
- AuthZ: Developer friendly authorization framework
- XACML: Oasis XACMLv2 implementation.
- Negotiation: Provide SPNego/Kerberos based Desktop SSO.
Segundo a documentação do PicketLink, o PicketLink Social é um projeto a parte que fornece formas de integrar a autenticação da aplicação Web com Facebook / Google OpenID. O criador do projeto é o Anil Saldhana que atualmente é o Lider do projeto PicketLink.
Todas as informações que estou escrevendo são baseadas no artigo do proprio Anil no DZone.
http://server.dzone.com/articles/jbossas7-making-your-web
Como exemplo vamos realizar a autenticação com o GMail. O Primeiro passo é gerar o OAuth Client ID que será utilizado na nossa aplicação Web. Acesse https://code.google.com/apis/console/ , depois API Access e crie um novo OAuth client ID.
Para realizar os testes vamos utilizar a aplicação disponibilizada pelo proprio Anil: http://dl.dropbox.com/u/20060733/picketlink-reg.war . Como boa prática coloque o mesmo nome projeto web: picketlink-reg e clique em Next.
Agora deixe a opção Web Application marcada e clique em more options.
Preencha as informações como abaixo:
As informações foram geradas e estão prontas para serem utilizadas. Os principais atributos são: CLIENT_ID e CLIENT_SECRET. Observe que localhost deve ser trocado pelo seu dominio ou deixe localhost para realizar os testes localmente.
Supondo que você já tenha o JBoss AS 7.1.1 instalado o primeiro passo é inserir as system-properties CLIENT_ID e CLIENT_SECRET abaixo de extensions. Veja:
<system-properties> <property name="CLIENT_ID" value="452082675701-aeo5gn54meu4vf9m9jmiqj4ebrrm1fjo.apps.googleusercontent.com"/> <property name="CLIENT_SECRET" value="72diTAds7YOf45isnUSMnUXt"/> </system-properties>
Adicione a Category de Log para facilitar o debugging:
<logger category="org.picketlink"> <level name="TRACE"/> </logger>
Configure o Security Domain como abaixo:
<security-domain name="external_auth" cache-type="default"> <authentication> <login-module code="org.picketlink.social.auth.ExternalAuthLoginModule" flag="required"/> </authentication> </security-domain>
Pronto! O Server Side já está configurado.
Agora na aplicação picketlink-reg.war edite os arquivos WEB-INF/context.xml e WEB-INF/jboss-web.xml atualizando as propriedades CLIENT_ID e CLIENT_SECRET com os valores gerados acima.
context.xml
<Context> <Valve className="org.picketlink.social.auth.ExternalAuthenticator" returnURL="http://localhost:8080/picketlink-reg/auth" scope="${SCOPE::email}" clientID="${CLIENT_ID::452082675701-aeo5gn54meu4vf9m9jmiqj4ebrrm1fjo.apps.googleusercontent.com}" clientSecret="${CLIENT_SECRET::72diTAds7YOf45isnUSMnUXt}" roleString="${ROLE_STRING::user}"/> <Valve className="org.picketlink.social.reg.RegistrationValve"/> </Context>
jboss-web.xml
<jboss-web> <security-domain>external_auth</security-domain> <valve> <class-name>org.picketlink.social.auth.ExternalAuthenticator</class-name> <param> <param-name>returnURL</param-name> <param-value>${RETURN_URL::http://localhost:8080/picketlink-reg/auth}</param-value> </param> <param> <param-name>scope</param-name> <param-value>${SCOPE::email}</param-value> </param> <param> <param-name>clientID</param-name> <param-value>${CLIENT_ID::452082675701-aeo5gn54meu4vf9m9jmiqj4ebrrm1fjo.apps.googleusercontent.com}</param-value> </param> <param> <param-name>clientSecret</param-name> <param-value>${CLIENT_SECRET::72diTAds7YOf45isnUSMnUXt</param-value> </param> <param> <param-name>roleString</param-name> <param-value>${ROLE_STRING::user}</param-value> </param> </valve> <valve> <class-name>org.picketlink.social.reg.RegistrationValve</class-name> </valve> </jboss-web>
A nossa aplicação está pronta! Realize o deploy e acesse a seguinte url: http://localhost:8080/picketlink-reg . Você verá a seguinte tela:
Clique em Login with Google e Seja Feliz
Para utilizar o Login com o Facebook é só seguir o mesmo princípio.
A versão utilizada nessa aplicação do Anil é a PicketLink Social 2.0. Atualmente o projeto se encontra na versão 3.0.
Fonte: http://server.dzone.com/articles/jbossas7-making-your-web
Comments