Problemas de autenticación en alfresco 3.4 cluster

cancel
Showing results for 
Search instead for 
Did you mean: 
pacosm
Customer

Problemas de autenticación en alfresco 3.4 cluster

Hola,

Tengo montado un cluster de alfresco con la versión 3.4 community. Un apache balancea con el modulo mod_jk a dos instancias tomcat6. Los indices lucene estan en local en cada una de las instancias tomcat y actualizan cada 5 seg, la base de datos mysql y el alf_data estan compartidos. Cuando conecto via web, me logueo correctamente, puedo insertar/borrar documentos/espacios/usuarios y los indices se replican correctamente y aparentemente funciona todo como debe. Sin embargo cuando intento conectar con la API de alfresco via SOAP falla, la aplicacioón conecta y devuelve el token de autenticación pero cuando intentamos insertar algun documento salta el siguiente error:

org.apache.ws.security.WSSecurityException: The security token could not be authenticated or authorized
        at org.apache.ws.security.processor.UsernameTokenProcessor.handleUsernameToken(UsernameTokenProcessor.java:150)
        at org.apache.ws.security.processor.UsernameTokenProcessor.handleToken(UsernameTokenProcessor.java:53)
        at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:311)
        at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:228)
        at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:159)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
        at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
        at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:662)

Parece como si el apache perdiera la sesión y cuando intenta insertar un documente lo intenta en el otro nodo el cual no posee el token de autenticación y falla. ¿Ha alguien le ha pasado algo parecido?

Saludos y muchas gracias
5 Replies
rmacian
Member II

Re: Problemas de autenticación en alfresco 3.4 cluster

Has configurado las sesiones en Apache como sticky ? Alfresco tiene un bug que no permite la replicación de sesiones entre nodos. Esto teoricament ese va a solucionar en la versión 3.4.3.

http://issues.alfresco.com/jira/browse/ALF-731

Por otro lado, has verificado que el cluster esta funcionando correctamente ? Si creas un espacio desde un nodo y asignas permisos, estos permisos se ven desde el otro nodo ?
toni_delafuente
Active Member

Re: Problemas de autenticación en alfresco 3.4 cluster

Hola,

Aquí explica Fernando Gonzalez bastante bien como funciona:
http://www.fegor.com/2011/06/replica-la-informacion-alfresco-ecm-en.html

Espero que te sirva.

Saludos.
mikel_asla1
Active Member

Re: Problemas de autenticación en alfresco 3.4 cluster

Buenas Toni!
Me gusto mucho el post! grande fegor.
Sin embargo lo hizo con la versión 3.3.4 Enterprise, tenemos otro hilo abierto al respecto y yo pensaba que esto estaba claro, ¿Funcionan las versiones posteriores a la 3.0 comunity en cluster?
toni_delafuente
Active Member

Re: Problemas de autenticación en alfresco 3.4 cluster

No, no se replican las sesiones entre nodos, por eso hay que configuarar el balanceador o balanceadores con sticky session.
rmacian
Member II

Re: Problemas de autenticación en alfresco 3.4 cluster

Mikel,

echale un ojo al JIRA que he puesto y verás el tema de las sesiones.

Yo estuve hace unas semanas haciendo pruebas e intentando configurar el cluster a nivel de tomcat. Entonces me di cuenta que el problema no era tan sencillo. Para que el tema de cluster funcione, ya sea a nivel de alfresco o de tomcat, se necesitan que todos los objetos sean serializables. Hay algunos objetos que usa JSF o Alfresco (no se si son especificos de JSF o los ha metido Alfresco) que no lo son y por tanto al intentar pasarlos de un nodo a otro terminaban dando un error de serverfaces de que no podia serializarlos..

Esperemos a ver si con la 3.4.3 se soluciona de una vez por todas