Version 4

    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.

     

    OAuth01.jpg

     

    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.

     

     

    OAuth02.jpg

     

    Agora deixe a opção Web Application marcada e clique em more options.

     

    OAuth03.jpg

     

    Preencha as informações como abaixo:

     

     

    OAuth04.jpg

     

    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.

     

    OAuth05.jpg

     

    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:

     

    OAuth06.jpg

     

    Clique em Login with Google e Seja Feliz

     

    OAuth07.jpg

     

    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