Page 1 of 1

Consultas recursivas en Active Directory

PostPosted:Thu Mar 29, 2012 11:11 am
by rcarracedo
Hola:

He configurado el OpenKM para que loguee por LDAP contra un Active Directory. Todo funciona perfectamente. El caso es que estoy intentando simplificar la administración de los usuarios y grupos asignándole los roles AdminRole y UserRole a grupos en vez de directamente a los usuarios. Las consultas funcionan utilizando el operador LDAP_MATCHING_RULE_IN_CHAIN y devuelve los resultados buscando recursivamente a través del arbol del AD.

El problema que tengo es que para devolver los grupos a los que pertenece un usuario, no he sido capaz de crear una consulta que admita como parámetro el login del usuario, porque los objetos que están dentro del CN=Users tienen a su vez como atributo CN=nombre apellido. El parámetro {0}, me rellena con el login de usuario. ¿Existe algún parámetro, por ejemplo {1}, que devuelva el nombre y apellido para poder generar la siguiente consulta?
Code: Select all
principal.ldap.roles.by.user.attribute String cn       
principal.ldap.roles.by.user.search.base String cn=Users,dc=miDominio,dc=local       
principal.ldap.roles.by.user.search.filter String (&(objectClass=group)(member:1.2.840.113556.1.4.1941:=cn={1},cn=users,dc=miDominio,dc=local)) 
Muchas gracias por vuestra ayuda!! :D

Re: Consultas recursivas en Active Directory

PostPosted:Fri Mar 30, 2012 11:26 am
by jllort
Esto que intentas hacer lo veo complicado, de entrada por que la consulta que tenemos implementada internamente no va en este sentido. A partir del usuario sacamos los roles del usuarios pero no los roles de los roles del usuario que es lo que estas apuntando, esto seria otro tipo de consulta que no creo que cuadre para nada con la implementación.

Deberías hacer una consulta que pasándole el usuario te saliesen estos roles recursivamente, te aconsejo que antes de probarlo directamente con openkm configures el apache ldap studio y juegues allí con las consultas. Si consigues que te funcione algo en este sentido coméntanoslo que lo publicaremos en la wiki, aunque como te digo ... no lo veo nada claro que esto se pueda realizar con una única consulta.

Re: Consultas recursivas en Active Directory

PostPosted:Mon Apr 02, 2012 8:03 am
by rcarracedo
No creas que es complicado. Ya lo he hecho con el OpenKM que estoy probando y funciona. El que realiza la consulta realmente es el directorio activo, el OpenKM no hace más que pasarle el filtro tal cual se lo configuramos y el AD se encarga de hacer la búsqueda recursivamente con el operador :1.2.840.113556.1.4.1941:. Por ejemplo, yo tengo a todos los grupos de usuarios metidos en UserRole y a los Administradores de Dominio en AdminRole y el OpenKM me los lista correctamente en la sección de Administración.

Os paso toda la configuración que tengo en la sección LDAP para que podais probar si quereis. Ojo, esto funciona contra un AD en windows 2008 server, creo que hace falta un service pack en un 2003 server y que no funciona en OpenLDAP, pero estos casos no los he probado.
Code: Select all
principal.ldap.mail.attribute	String 	mail 	
principal.ldap.mail.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.mail.search.filter	String 	(&(objectclass=person)(sAMAccountName={0})) 
principal.ldap.referral	String 	follow 	
principal.ldap.role.attribute	String 	sAMAccountName 
principal.ldap.role.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.role.search.filter	String 	(&(objectclass=group)(|(cn=UserRole)(cn=AdminRole))) 
principal.ldap.roles.by.user.attribute	String 	cn 
principal.ldap.roles.by.user.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.roles.by.user.search.filter	String 	(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=cn={1},cn=users,dc=miDominio,dc=local)) <--------- (Esta es la query que necesito)
principal.ldap.security.credentials	String 	mipasswd
principal.ldap.security.principal	String 	CN=admin,cn=Users,dc=miDominio,dc=local 
principal.ldap.server	String 	ldap://10.0.0.1 
principal.ldap.user.attribute	String 	sAMAccountName 
principal.ldap.user.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.user.search.filter	String 	(&(objectCategory=person)(|(memberOf:1.2.840.113556.1.4.1941:=cn=UserRole,cn=users,dc=miDominio,dc=local)(memberOf:1.2.840.113556.1.4.1941:=cn=AdminRole,cn=users,dc=miDominio,dc=local))) <--------- (esta funciona perfectamente)
principal.ldap.username.attribute	String 	cn 
principal.ldap.username.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.username.search.filter	String 	(&(objectclass=person)(sAMAccountName={0})) 
principal.ldap.users.by.role.attribute	String 	sAMAccountName 
principal.ldap.users.by.role.search.base	String 	cn=Users,dc=miDominio,dc=local 
principal.ldap.users.by.role.search.filter	String 	(&(objectClass=person)(memberOf:1.2.840.113556.1.4.1941:=cn={0},cn=Users,dc=miDominio,DC=local)) <---------- (esta tambien funciona)
El único problema que tengo es que en el arbol del directorio activo, la rama de la que cuelgan los usuarios tiene por raiz CN=nombre apellido, en vez de CN=login, lo que me impide obtener los roles por usuario, puesto que no sé de dónde obtener el nombre apellido del usuario que debo pasarle como parámetro.

Las herramientas que uso son directamente la consola del directorio activo y el AD Explorer. :D

Re: Consultas recursivas en Active Directory

PostPosted:Tue Apr 03, 2012 5:53 pm
by jllort
Y en vez de filtrar por el cn no puedes filtrar por el smAccountName ? el operador 1.2.840.113556.1.4.1941 es realmente raro, no es la primera vez que veo algo así pero sinceramente no sabía muy bien lo que era. Tienes algun enlace con información ( buena de esto ? ).

a parte del Active Explorer, esta el Apache LDAP Studio ( te lo recomiendo, es muchísimo mejor ).

Re: Consultas recursivas en Active Directory

PostPosted:Wed Apr 11, 2012 8:56 am
by rcarracedo
Hola jllort:

Acabo de probar el LDAP Studio, es muy completo, perfecto para ver y modificar los atributos, gracias por la recomendación.

Te paso un enlace que define el operador LDAP_MATCHING_RULE_IN_CHAIN: http://ldapwiki.willeke.com/wiki/1.2.84 ... 6.1.4.1941

Al respecto de la consulta por sAMAccountName, he encontrado enlaces que indican que no se puede hacer directamente la consulta por ese atributo sin antes recorrer la raíz con CN:

http://social.technet.microsoft.com/For ... c650a2a320
http://boardreader.com/thread/LDAP_MATC ... 2a320.html

Si hubiese una forma de poder pasarle el cn como parámetro le daría una flexibilidad muy grande a la aplicación porque se podría configurar a los usuarios por su rol desde el AD mediante los grupos organizativos a los que pertenecen en vez de asignarle el grupo del gestor documental a cada usuario individualmente.

Re: Consultas recursivas en Active Directory

PostPosted:Fri Apr 13, 2012 7:05 am
by jllort
A ver si encuentro un poco de tiempo y me lo miro, he puesto el ticket en http://issues.openkm.com/view.php?id=2114