LDAP en KMKey

Hace algún tiempo describimos cómo llevar a cabo un Single Sign On (SSO) en KMKey.  Hoy vamos a detallar cómo conseguir autentificarnos contra un servidor LDAP, como puede ser Active Directory, sin necesidad de SSO, simplemente usando los mismos nombres de usuario y clave en la página de login de KMKey.

1) Lo primero que vamos a necesitar es instalar algunas librerías y el módulo de python ldap para python2.4:

# Comprobar que disponemos de la rama non-free activada en nuestro /etc/apt/sources.list
su
apt-get install libldap-2.4-2 libldap2-dev libnss-ldap python-ldap
apt-get install libsasl2-modules-ldap libsasl2-dev

apt-get source python-ldap
python2.4 setup.py install


2) Seguidamente necesitaremos actualizar o instalar algunos módulos de KMKey.  Los podemos obtener mediante subversion:

cd /usr/local/kmkey/zope/Products/
svn co https://joinup.ec.europa.eu/svn/kmkey/products/KMKeyLDAP/trunk KMKeyLDAP

svn co https://joinup.ec.europa.eu/svn/kmkey/vendors/CPSDirectory/branches/kmkey CPSDirectory
svn co https://joinup.ec.europa.eu/svn/kmkey/vendors/CPSUserFolder/branches/kmkey CPSUserFolder


/usr/local/kmkey/zope/bin/zopectl restart


3) Entrar en el Zope Management Interfac (ZMI), ir a portal_directories, y añadir un "CPS LDAP Backing Directory" que se llame "members_ldap", con estas propiedades:

Schemas (old style - for backward compatibility) -> members_ldap
Additional schemas (new style - merged with the previous) -> members_readonly_entry_flag_true
Is the directory read-only? -> Marcado
ACL: entry create roles -> Manager
ACL: entry delete roles -> Manager
ACL: entry view roles -> Manager
ACL: entry edit roles -> Manager
Field for entry title -> cn
Fields with substring search -> cn givenName sn mail
Field for password (if authentication) -> userPassword
LDAP server -> IP del servidor LDAP
LDAP port -> 389
LDAP base -> CN=Users,DC=dominio,DC=win (este es el defecto, pero puede cambiar para cada LDAP)
LDAP scope -> SUBTREE
LDAP object classes (search) -> top, person
LDAP bind dn -> usuariocreado@DOMINI.WIN (corresponde al usuario creado en el punto 2)
LDAP bind password -> clave correspondiente al usuario creado en el punto 2
LDAP rdn attribute (create) -> sAMAccountName
LDAP object classes (create) -> top, person
Field that contains a list of sub entries id for hierarchical directory -> None
attr used as id for children_attr default is ldap_rdn_attr. -> cn
LDAP auto reconnect feature: maximum retry -> 1
LDAP auto reconnect feature: delay in seconds before retrying -> 60.0
LDAP network timeout in seconds for any request (0 means no limit) -> 0.0

Una vez hecho esto, se puede comprobar que funciona la conexión con el LDAP usando la pestaña "Search" del propio directory

4) Finalmente, en el mismo ZMI, en kmkey/portal_setup pestaña Profiles debemos importar el profile "KMKey LDAP"

Y ya lo tenemos disponible. A partir de este momento nuestro KMKey admitirá tanto usuarios locales como usuarios de nuestro LDAP.   A éstos últimos se les generará automáticamente un usuario local de KMKey la primera vez que entren, aunque el password será siempre validado contra el LDAP.  

Finalmente, tenemos la posibilidad de añadir en portal_skins/custom un script con nombre getLanguageFromLDAP que reciba como parámetro el DN del usuario y devuelva un idioma por defecto, y getSecurityGroupsFromLDAP que reciba el mismo parámetro y devuelva los grupos de permisos a asignar al usuario por defecto durante el proceso de creación.

Etiquetas: