JNDIRealm e integração com Active Directory

Bom dia galera!

Gostaria que o tomcat fizesse integração com o Active Directory e permitisse acesso à minha aplicação somente a usuários de um determinado Grupo do AD. Para tanto, tenho a seguinte configuração que não tenho a mínima idéia se funciona, pois não consegui criar log das tentativas de acesso, em meu server.xml:

<Realm alternateURL="ldap://cor-pae-dc02:389"
       className="org.apache.catalina.realm.JNDIRealm"
       connectionName="xxx@corsan.reders" connectionPassword="xxx"
       connectionURL="ldap://cor-pae-dc01:389"
userBase="dc=corsan,dc=reders"
userSubtree="true"
userSearch="(&(objectClass=user)(userPrincipalName={0}))"
userRoleName="memberOf"
roleBase="ou=Grupos,dc=corsan,dc=reders"
roleSubtree="true"
roleName="cn"
roleSearch="(&(objectClass=group)(uniqueMember={0}))"
validate="true"/>
/>

Já tentei várias outras configurações sem sucesso também, o problema é que sempre é solicitado o usuário e senha, ou seja, não consigo de forma alguma autenticar em minha aplicação, onde no web.xml tem:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected Area</web-resource-name>
            <url-pattern>/manager/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>USUARIOS_SISESTOQUEDEOB</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <description>system administrators</description>
        <role-name>USUARIOS_SISESTOQUEDEOB</role-name>
    </security-role>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>My Secure Realm</realm-name>
    </login-config>

Alguém tem alguma idéia de como fazer isto?

Obrigado.

Flavio eu estou tentando fazer a configuração no meu server xml, mas não tá dando certo, já que o seu pede para tudo eu gostaria que o meu pelo menos pedisse a autenticação e não tá funcionando poderia me auxiliar.

tallk: angelobuild@gmail.com

Desde já agradesço pela atenção.

Att,
Ângelo Santos.

[quote=angelobuild]Flavio eu estou tentando fazer a configuração no meu server xml, mas não tá dando certo, já que o seu pede para tudo eu gostaria que o meu pelo menos pedisse a autenticação e não tá funcionando poderia me auxiliar.

tallk: angelobuild@gmail.com

Desde já agradesço pela atenção.

Att,
Ângelo Santos.[/quote]

Cola aqui o teu server.xml e o teu web.xml

Att,

Eu consegui, mas tá dando o seguinte erro:

SEVERE: Exception performing authentication
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'dc=sistema,dc=org,dc=br’
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.searchAux(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_search(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
at javax.naming.directory.InitialDirContext.search(Unknown Source)
at org.apache.catalina.realm.JNDIRealm.getUserBySearch(JNDIRealm.java:1067)
at org.apache.catalina.realm.JNDIRealm.getUser(JNDIRealm.java:975)
at org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:924)
at org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:810)
at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:181)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)

segue a configuração do JNDIRealm

JNDIRealm

web.xml

HTMLManger and Manager command /index.jsp tomcat BASIC Tomcat Manager Application > BASIC Tomcat Manager Application

Boa tarde galera!

Qual o status desta configuração pra vocês? Conseguiram fazer a autenticação?
Estou precisando deste requisito em um sistema, e gostaria de exemplos. Se pudessem ajudar eu agradeceria.
Preciso fazer com que o Tomcat façaa autenticação em um AD e em seguida fazer requisições a um Servidor EJB em outra máquina, passando os dados do Subject.

Qualquer ajuda ébem vinda.

Att,
Luiz Gustavo

Fala Luiz Gustavo, consegui implementar a nível de aplicação, não tentei novamente a nível de tomcat (Web-Container), mas podemos tentar fazer juntos ae, acho que agora vai dar certo na epoca eu não possuia muitos conhecimentos sobre o assunto.

Descreve mais sobre o ambiente que você quer implementar isso, a implementação via Web-Container é sua única opção de solução ou você poderia outras opções, como por exemplo a nível de aplicação?

Opa, tudo bem Ângelo?
Então, o ambiente é o seguinte:

Aplicação EJB no GlassFish em um servidor.
Aplicação JSF no Tomcat em outro servidor.
Active Directory já existente, com as credenciais dos usuários.

Preciso autenticar os usuários primeiramente no Tomcat, para já implementar a segurança declarativa para as páginas e menus que os usuários poderão acessar.
Em seguida preciso manter o mesmo nível de segurança nas requisições EJB. Idealmente preciso ter o Subject do usuário logado na aplicação EJB, para fazer a segurança dos componentes.
Além disso, a aplicação é multicliente, e a mesma aplicação EJB precisa acessar datasources diferentes, a depender do usuário que está acessando.

Tudo está me levando a utilizar JAAS para fazer esta autenticação, implementando um LoginModule específico para autenticar no AD. Na verdade estou tentando implementar um tutorial que encontrei, que usa o CAS (http://www.ibm.com/developerworks/web/library/wa-singlesign/).

Vou continuar dando uma olhada para ver se isso vai antender à minha necessidade.

Se quiser fazer um trabalho conjunto, para trocarmos informações, seria muito bom.

Abraço!

Pessoal,

Preciso resolver o mesmo problema, alguma solução já foi implementada?

Abs,

Carlos