12

Todavía estoy tratando de encontrar una solución basada en Java para SSO (que se ejecute en * nix), que puedo usar en JBoss para autorizar contra un controlador de Active Directory/dominio. Inicialmente traté de hacerlo a través de NTLM, pero renuncié porque no será compatible con Windows Server> = 2008.SSO de Java: autenticación Kerberos contra Active Directory

Por lo tanto, intento implementar esto usando Kerberos, pero me parece imposible encontrar un correcto/funcionando solución. Por favor, que me señale en la dirección correcta que explica cómo configurar una configuración de este tipo, cómo validar en el Active Directory y/o controlador de dominio con el fin de:

  1. averiguar si la cuenta es válida y
  2. fetch la lista del grupo del usuario

¡Se agradece cualquier ayuda!


ACTUALIZACIÓN

Estoy trabajando en una solución utilizando JCIFS-ext-0.9.4 y JCIFS-krb5-1.3.12. He definido la Web.xml como se describe a continuación:

<web-app> 
    <!-- servlet/servlet-mapping/welcome-file-list skipped --> 

<filter> 
<filter-name>auth</filter-name> 
<filter-class>jcifs.http.AuthenticationFilter</filter-class> 

<init-param> 
<param-name>java.security.auth.login.config</param-name> 
<param-value>/WEB-INF/login.conf</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.spnego.servicePrincipal</param-name> 
<param-value>HTTP/[email protected]</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.spnego.servicePassword</param-name> 
<param-value>supersecret</param-value> 
</init-param> 

<init-param> 
<param-name>sun.security.krb5.debug</param-name> 
<param-value>true</param-value> 
</init-param> 

<init-param> 
<param-name>java.security.krb5.realm</param-name> 
<param-value>mydomain.com</param-value> 
</init-param> 

<init-param> 
<param-name>java.security.krb5.kdc</param-name> 
<param-value>testdom01.mydomain.com </param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.smb.client.domain</param-name> 
<param-value>TESTDOMAIN</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.enableNegotiate</param-name> 
<param-value>true</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.basicRealm</param-name> 
<param-value>mydomain.com</param-value> 
</init-param> 

<init-param> 
<param-name>jcifs.http.domainController</param-name> 
<param-value>testdom01.mydomain.com</param-value> 
</init-param> 

</filter> 
<filter-mapping> 
<filter-name>auth</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

Esto lleva a la siguiente StackTrace si intenta acceder a la aplicación:

2010-07-22 15:53:10,588 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/google].[default]] Servlet.service() for servlet default threw exception 
java.lang.ArrayIndexOutOfBoundsException 
     at java.lang.System.arraycopy(Native Method) 
     at jcifs.ntlmssp.Type2Message.toByteArray(Type2Message.java:261) 
     at jcifs.spnego.Authentication.processNtlm(Authentication.java:265) 
     at jcifs.spnego.Authentication.process(Authentication.java:233) 
     at jcifs.http.Negotiate.authenticate(Negotiate.java:46) 
     at jcifs.http.AuthenticationFilter.doFilter(AuthenticationFilter.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
     at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) 
     at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
     at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) 
     at java.lang.Thread.run(Thread.java:619) 

se aprecia ninguna ayuda.

Respuesta

5

Para hacer esto, realmente necesita usar LDAP. Afortunadamente para ti, Java tiene soporte sólido para Kerberos y LDAP. El procedimiento detallado está en http://java.sun.com/products/jndi/tutorial/ldap/security/gssapi.html.

Generalidades de los pasos: - Autenticación de Kerberos - Uso de Kerberos para asumir la identidad del usuario - Realizar GSSAPI se unen al servidor LDAP Active Directory - Recuperar la lista de grupos a través de LDAP

+0

¿Por qué esto obtuvo un voto a favor? ¡Kerberos no contiene una lista de grupos de usuarios! – Borealid

0

Utilizamos Jespa para manejar la autenticación NTLM, hemos probado tanto en Tomcat & Glassfish que se ejecuta en Solaris, IE & Firefox son compatibles, y al parecer Chrome ahora también es compatible con NTLM. Sin embargo, necesitará una licencia para uso comercial, pero definitivamente la recomendaría.

+0

problema con Jespa para mí es que asume que Java EE y el uso de marcos como Play lo hace inservible para mí – andyczerwonka

3

Puede utilizar Waffle. Es gratis y admite Negotiate, NTLM y Kerberos. También puedes consultar la lista de grupos del usuario.

"WAFFLE - Marco funcional de autenticación de Windows (Light Edition) es una biblioteca C# y Java nativa que hace todo la autenticación de Windows (Negociar, NTLM y Kerberos)."

+2

Waffle desafortunadamente usa api win32 y se ejecuta solo en Windows – MrG

0

Empecé a escribir un artículo mientras experimentaba con kerberos y JBoss, el plan es tener una guía completa para principiantes para configurar y usar kerberos con JBoss. No digo que sea una respuesta completa, pero si hace preguntas, puedo intentar responderlas y agregarlas al blog.

the article

0

Si desea depurar las Kerberos, configuración de AD en su máquina y luego se puede descargar la aplicación desde el siguiente enlace. https://github.com/shubham49/debugSSO Descargue la aplicación y despliéguela en el servidor weblogic. Después del despliegue, abra la página de inicio y se encontrará con diferentes pruebas para depurar la configuración.

Cuestiones relacionadas