cancel
Showing results for 
Search instead for 
Did you mean: 

Alfresco 3.2r Configurar autenticación en varias ramas ldap

rafabono_9703
Champ in-the-making
Champ in-the-making
Buenas, expongo el caso con el que me he encontrado:

He realizado una instalación de alfresco 3.2r en un sólo nodo atacando a una bbdd oracle. Una vez instalado, compruebo que puedo logarme y que todo está correcto.

Posteriormente configuro la autenticación para ldap. Para ello, copio la carpeta  subsystems/Authentication/ldap del contexto desplegado en el extension. Dentro de esta carpeta, creo otra llamada ldap1, y ahí muevo los ficheros ldap-authentication-context.xml y ldap-authentication.properties. Tras modificar estos ficheros para que se autentique contra una rama de ldap (para más ramas habría que hacer lo mismo, crear otra carpeta ldap2, ldap3, etc…) y añadir la siguiente línea al alfresco-global.properties:

authentication.chain=ldap1:ldap,alfrescoNtlm1:alfrescoNtlm

reinicio alfresco para que tome la nueva configuración.

Sin embargo no funciona, no es capaz de autenticar por ldap.

Entonces borro el esquema de bbdd, despliegue, work, temp, content-store e índices y hago como una nueva instalación, pero con la configuración que ya tengo.

Al arrancar así, sí que funciona la autenticación contra ldap.

Ahora pruebo añadir una nueva rama. Pero nada, tras reiniciar, no sólo no se loga contra esa nueva rama, sino que me mata el proceso del tomcat donde corre alfresco.

Vuelvo a realizar la instalación limpia con la configuración para las dos ramas, y ahora sí que las coge.

Lo que ocurre entonces es que cada vez que configuro una nueva rama y me intento logar sobre esta, me mata el proceso. Para que me coja las distintas ramas, estas deben estar configuradas al realizar la instalación.

Me gustaría saber si alguien se ha encontrado con esta situación y si ha encontrado solución a este problema, que pinta ser un bug de alfresco.

Para completar más la información adjunto un ejemplo de uno de los ldap-authentication.properties. Indicar también que no utilizo sincronización con el ldap:

ldap.authentication.active=true

ldap.authentication.allowGuestLogin=false

ldap.authentication.userNameFormat=uid=%s,o=XXXX,o=XXXXX,o=XXXXXX,c=XX

ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory

ldap.authentication.java.naming.provider.url=ldap://ldap.XXXXXX:389

ldap.authentication.java.naming.security.authentication=simple

ldap.authentication.escapeCommasInBind=false

ldap.authentication.escapeCommasInUid=false

ldap.authentication.defaultAdministratorUserNames=

ldap.synchronization.active=false

ldap.synchronization.java.naming.security.principal=cn\=Manager,dc\=company,dc\=com

ldap.synchronization.java.naming.security.credentials=secret

ldap.synchronization.queryBatchSize=1000

ldap.synchronization.groupQuery=(objectclass\=groupOfNames)

ldap.synchronization.groupDifferentialQuery=(&(objectclass\=groupOfNames)(!(modifyTimestamp<\={0})))

ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)

ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))

ldap.synchronization.groupSearchBase=ou\=Groups,dc\=company,dc\=com

ldap.synchronization.userSearchBase=ou\=People,dc\=company,dc\=com

ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp

ldap.synchronization.timestampFormat=yyyyMMddHHmmss'Z'

ldap.synchronization.userIdAttributeName=uid

ldap.synchronization.userFirstNameAttributeName=givenName

ldap.synchronization.userLastNameAttributeName=sn

ldap.synchronization.userEmailAttributeName=mail

ldap.synchronization.userOrganizationalIdAttributeName=o

ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider

ldap.synchronization.groupIdAttributeName=cn

ldap.synchronization.groupType=groupOfNames

ldap.synchronization.personType=inetOrgPerson

ldap.synchronization.groupMemberAttributeName=member

ldap.synchronization.enableProgressEstimation=true


Muchas gracias.
7 REPLIES 7

toni_delafuente
Confirmed Champ
Confirmed Champ
Hola Rafa,

Puedes encontrar un excelente tutorial sobre configuración de varias ramas (o varios ldap) en el blog de Isaías Aranda http://www.linuxero.es.

De todas formas pego aquí el contenido de su artículo (gracias Isaías).

Autenticación y sincronización en Alfresco 3.2 y 3.3

Para usar la autenticación ldap tenemos que crear dentro del directorio extension un directorio llamado subsystems. Ahora podemos crear varias configuraciones. Dentro desde creamos el directorio Authentication para indicarle a alfresco que tipo de subsistema es. En este caso es de autenticación. Ahora tenemos que decirle a Alfresco que tipo de autenticación vamos a utilizar. para ello creamos el directorio ldap. Aqui podemos añadir todas las configuraciones necesarias. Por ejemplo, yo voy a añadir dos configuraciones para autenticar contra dos ramas, por lo que creo un directorio llamado ldap1 y otro llamado ldap2.
Dentro de cada uno de estos directorios vamos a crear la configuración de cada una de las ramas. Los ejemplos que muestro a continuación está configurados para usar Openldap. Primero creamos un archivo llamado ldap “ldap-authentication.properties” que contendrá todo los necesario para la autenticación y sinronización de usuarios y grupos:

###########################
#######AUTENTICACIÓN#######
###########################
# Activamos o desactivamos la autenticación.
ldap.authentication.active=true
# Cadena para definir la rama donde se encuantran los usuarios. Recordad que alfresco autentica con en DN. En mi caso mi Dn es el mail.
ldap.authentication.userNameFormat=mail=%s,ou=usuarios,dc=dominio,dc=es
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
# Dirección IP del LDAP.
ldap.authentication.java.naming.provider.url=ldap://ldap.dominio.es:389
# Tipo de autenticación.
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
# Definimos los usuarios adminsitradores seguidos por comas.
ldap.authentication.defaultAdministratorUserNames=iaranda@dominio.es,admin@dominio.es
###########################
######SINCRONIZACIÓN#######
###########################
# Para activar o desactivar la sincronización
ldap.synchronization.active=true
# EL usuario con permisos en el ldap para poder sincronizar
ldap.synchronization.java.naming.security.principal=cn\=Directory Manager
# La contraseña del usuario para sincronizar
ldap.synchronization.java.naming.security.credentials=CONTRASEÑA
# Para páginar los resultados de las consultas. Lo dejamos a 0.
ldap.synchronization.queryBatchSize=0
# Consulta para buscar los atributos de los grupos.
ldap.synchronization.groupQuery=(objectclass\=groupOfNames)
# La consulta que representan los grupos a importar que han cambiado desde un cierto tiempo.
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=groupOfNames)(!(modifyTimestamp<\={0})))
# Consulta para buscar los atributos de los usuarios.
ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)
# La consulta que representan los usuarios a importar que han cambiado desde un cierto tiempo.
ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))
# La rama donde se encuentran los grupos.
ldap.synchronization.groupSearchBase=ou\=roles,dc\=dominio,dc\=es
# La rama donde se encuentran los usuarios.
ldap.synchronization.userSearchBase=ou\=corporativos,dc\=dominio,dc\=es
# El nombre del atributo que ha guarda las últimas actualizaciones de grupos o usuarios.
ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
# El formato de fecha y hora. Desafortunadamente, esto varía entre los Directorios Activos
ldap.synchronization.timestampFormat=yyyyMMddHHmmss'Z'
# El atributo principal que representa el nombre de usuario.
ldap.synchronization.userIdAttributeName=mail
# El atributo que contiene el nombre.
ldap.synchronization.userFirstNameAttributeName=cn
# El atributo que contiene el apellido
ldap.synchronization.userLastNameAttributeName=sn
# Atributo que contiene el correo.
ldap.synchronization.userEmailAttributeName=mail
# El atributo que define a los grupos.
ldap.synchronization.userOrganizationalIdAttributeName=ou
# Directorio donde queremos que se creen los directorios de los usuarios
ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider –> Sincroniza los usuarios en "User homes
ldap.synchronisation.defaultHomeFolderProvider=personalHomeFolderProvider –> Sincroniza los usuario en "Company home"
# El atributo que contiene el nombre del grupo.
ldap.synchronization.groupIdAttributeName=cn
# El objectclass que define los grupos.
ldap.synchronization.groupType=groupOfNames
# El objectclass que contiene los atributos del usuario.
ldap.synchronization.personType=inetOrgPerson
# EL atributo que define los miembros del grupo
ldap.synchronization.groupMemberAttributeName=member
# Cuando se activa, la consulta del usuario se tiene que ejecutar dos veces con el fin de contar con las entradas.
ldap.synchronization.enableProgressEstimation=true

Ahora creamos el archivo llamado “default-synchronization.properties” que contendrá el cron y otras propiedades opcionales para la sincronización:

# Para que sincronize sólo los cambios
synchronization.synchronizeChangesOnly=true
# Cron para definir el tiempo de sincronización.Por ejemplo cada 5 minutos:
synchronization.import.cron=0 0/5 * * * ?
# Para que se sincronize un usuario que no existe aun en alfresco al entrar.
synchronization.syncWhenMissingPeopleLogIn=true
# Para sincronizar al arrancar alfresco.
synchronization.syncOnStartup=true
# Para permitir o denegar que un usuario que no está sincronizado pueda entrar.
synchronization.autoCreatePeopleOnLogin=true
# El número de entradas antes de ingresar al proceso de progreso
synchronization.loggingInterval=100
# El número de hilos a utilizar cuando se sincroniza.
synchronization.workerThreads=2
Para activar la autenticación ldap lo hacemos en el archivo alfresco-global.properties. Le especificamos los direcotios que hemos creado dentro de “extension/susbsystems/Authentication/” y el tipo de autenticación que son.

authentication.chain=ldap1:ldap,ldap2:ldap

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Efectivamente, algo raro tiene que haber puesto que yo en una 3.2 SP2 contra mysql funciona perfectamente, y en otras pruebas que hemos realizado en local funiona perfectamente.

El problema viene en esa instalacion concreta, que no acaba de ir.

Raro Raroooooooo

Saludos

rafabono_9703
Champ in-the-making
Champ in-the-making
SOLUCIONADO. El origen del problema estaba en la configuración de la jvm. Uno de los parámetros que le pasaba era:

-Xss128k (tamaño de pila para cualquier hilo)

y este parámetro era el culpable de provocar la parada del proceso java. Quitándolo funciona correctamente y me deja añadir nuevas ramas.

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Muy bueno Rafael.

Saludos

fegor
Star Collaborator
Star Collaborator
Efectivamente ese es el tamaño de la pila (Stack) para cada hilo que usa la JVM, al quitarlo le asignas por defecto 64k pero eso es muy poco por ejemplo para realizar reindexaciones y determinados procesos que requieren profundidad y por tanto recursividad.

¿Has probado a cambiar el tamaño a 256k por ejemplo a ver si te sigue dando ese problema?, ¿como tenías los demás parámetros de memoria de la JVM?

Un saludo.

ronald-8412
Champ in-the-making
Champ in-the-making
Bunas a todos, soy novato en esto de Alfresco pero quiero atenticarlo con ldap pero cada vez que miraba las paginas pues habian muchas alternativas asi que llegue a esta solución:

1.- crear un ldap con un usuario que tenga permisos que va a ser el encargado de establecer comunicación entre alfresco y LDAP

2.- archivos para configurar (en la siguiente dirección):
   /opt/alfresco-4.1.2/tomcat/shared/classes/alfresco/subsystems/Authentication/ldap

3.-    
   (ldap-authentication.properties)

   ldap.authentication.allowGuestLogin=false
   ldap.authentication.userNameFormat=uid=%s,ou=Users,dc=domain,dc=local
   ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
   ldap.authentication.java.naming.provider.url=ldap://<ldapservername>:389
   ldap.authentication.java.naming.security.authentication=simple
   ldap.authentication.escapeCommasInBind=false
   ldap.authentication.escapeCommasInUid=false
   ldap.authentication.defaultAdministratorUserNames=<user1>,<user2>

   (passthru-authentication-context.properties)

   passthru.authentication.useLocalServer=false
   passthru.authentication.domain=<shortdomainnameasisinfilesmb.conf>
   passthru.authentication.servers=<domaincontroleripaddress>
   passthru.authentication.guestAccess=false
   passthru.authentication.defaultAdministratorUserNames=<domainuser>
   #Timeout value when opening a session to an authentication server, in milliseconds
   passthru.authentication.connectTimeout=5000
   #Offline server check interval in seconds
   passthru.authentication.offlineCheckInterval=300
   passthru.authentication.protocolOrder=NetBIOS,TCPIP
   passthru.authentication.authenticateCIFS=true
   passthru.authentication.authenticateFTP=true


(alfresco-global.properties: esta linea es para activar la autenticación)
   authentication.chain=ldap1:ldap,alfrescoNtlm1:alfrescoNtlm

pero nose que el el PASS-THROUGH y para que sirve, no se que requisitos tiene que tener active directory para poder  trabajar con ldap tambien investigue que tenia que tener abierto el puerto 389 mas la dirección ip, a parte de esto al momento de sincronizar con ldap e leido que se crea un arbol de directorio dentro de esta el cual permite a alfresco encontrar cierto directorio, bueno eso es lo que leido hasta el momento seria de gran ayuda su apoyo de antemano gracias.

cristinamr
World-Class Innovator
World-Class Innovator
Yo una vez tuve que lidiar con estos temas y te recomendaría que sin tener ni papa de idea empezaras en local intentando configurar un ldap y conectarlo a tu alfresco. Para ello, te recomiendo que le eches un vistazo a este post y sobre todo la herramienta de apache studio que es muy buena (sobre todo para empezar con ello).

Prueba y nos vas comentando.

Un saludo!
--
VenziaIT: helping companies since 2005! Our ECM products: AQuA & Seidoc