Interfaçage avec LDAP

Dans cette partie nous allons voir comment configurer CPS pour qu'il utilise LDAP. Il ne s'agit pas d'une introduction à LDAP. Nous allons simplement voir les mécanismes de bases qui permettent d'interfacer CPS avec LDAP.

Warning

Ne pas appliquer la procédure telle quelle à un site en production, cela pourrait causer la perte de données.

Ce document s'appuie sur les produits suivants :

Serveur LDAP

Dans la suite de ce document la base LDAP sera considérée comme initialisée avec le contenu suivant :

dn: ou=sophia,o=ensmp,c=fr
ou: sophia
objectClass: top
objectClass: organizationalUnit

dn: ou=People, ou=sophia,o=ensmp,c=fr
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Groups, ou=sophia,o=ensmp,c=fr
ou: Groups
objectClass: top
objectClass: organizationalUnit
                        

Le manager est identifié par le dn suivant :

cn=Manager,ou=sophia,o=ensmp,c=fr
                        

Les classes associées aux membres seront top et person.

Les classes associées aux groupes seront top et groupOfUniqueNames.

Authentification

Il faut commencer par installer le produit LDAPUserGroupsFolder. Pour cela, décompresser le contenu de l'archive LDAPUserGroupsFolder-1.0.tar.gz dans le répertoire Products de l'installation Zope.

Redémarrer Zope pour que le nouveau produit soit pris en compte.

L'authentification via LDAP nécessite de remplacer le dossier acl_users qui se trouve à la racine du site CPS par un dossier de type LDAPUserGroupsFolder.

  • Aller à la racine du site CPS, et supprimer le dossier acl_users.

  • Toujours à la racine du site CPS, ajouter un objet de type LDAPUserGroupsFolder.

  • Configurer la connexion au serveur LDAP, dans le cadre de ce document les Roles ne sont pas stockés dans le serveur LDAP.

    Tableau 1. Add LDAP User Folder

    Title 
    LDAP Server[:port]127.0.0.1:10389
    Login Name AttributeUID
    RDN AttributeUID
    Users Base DNou=People,ou=sophia,o=ensmp,c=fr
    LDAPRole storageLDAPRoles not stored on LDAP server
    LDAPRoles Base DN 
    Groups Base DBou=Groups,ou=sophia,o=ensmp,c=fr
    Manager DN**cn=Manager,ou=sophia,o=ensmp,c=fr
    User object classestop,person
    User password encryptionSHA
    Default User RolesMember

    Avertissement

    La valeur Member pour Default User Roles est valable car notre serveur LDAP ne sert que pour ce site CPS.

Une fois le nouveau dossier acl_users en place, il est possible de créer des utilisateurs et des groupes via la ZMI.

  • Sélectionner le dossier acl_users (à la racine du site CPS).

  • Aller dans l'onglet Users

  • Créer un nouvel utilisateur qui sera le webmaster du site CPS. En dehors des champs requis il ne faut pas oublier de cocher la case Manager.

  • Une fois cet utilisateur créé il est possible de se logguer via CPS en tant qu'administrateur. Les annuaires et les droits sur les rubriques ne sont cependant plus modifiables via CPS. Pour cela il faut activer les annuaires basés sur LDAP.

Annuaires basés sur LDAP

Pour activer cette fonctionnalité il faut remplacer les annuaires members et groups du dossier portal_metadirectories par ceux disponibles sur le site http://www.cps-project.org sous la forme de .zexp.

Note

Ces deux annuaires peuvent également être créés manuellement, par l'intermédiaire d'objets LDAPDirectory.

  • Télécharger ldap-members.zexp et ldap-groups.zexp.

  • Dans la ZMI, supprimer les dossiers members et groups contenus dans portal_metadirectories.

  • Toujours dans portal_metadirectories, importer ldap-members.zexp et ldap-groups.zexp.

    Note

    Pour importer des fichiers .zexp ceux-ci doivent être placés dans le répertoire import de l'installation de Zope.

  • Une fois l'importation terminée, deux annuaires doivent être à nouveau présents dans portal_metadirectories

  • Pour chaque annuaires, aller dans l'onglet LDAP et rentrer les paramètres de connexion au serveur LDAP.

Le schéma de l'annuaire members contient trop d'informations par rapport à la structure de notre LDAP (qui est très sommaire), il faut donc supprimer certains attributs.

  • Aller dans portal_metadirectories/members

  • Sélectionner l'onglet Schema

  • Supprimer les attributs :

    • fullName

    • preferredLanguage

    • employeeType

    • mail

    • mobile

    • postalAddress

    • roles

    puis mettre cn comme Alias de givenName.

  • Revenir dans l'onglet Properties

  • Remplacer le contenu du champ Display Property par sn. C'est ce champ qui sera utilisé pour représenter un utilisateur dans CPS (typiquement dans les listes déroulantes permettant d'affecter des droits).

Si tout s'est déroulé correctement il doit désormais être possible d'utiliser CPS+LDAP. Si des erreurs se produisent, consultez la section suivante qui décrit celles que j'ai pu rencontrer.

Erreurs pouvant survenir

Voici certaines des erreurs rencontrées lors de l'installation.

Erreurs lors de la création du dossier acl_users

Strong authentication required

Vérifier que la connexion au serveur LDAP est correctement paramétrée (dossier acl_users). Cette erreur ce produit généralement lors d'une tentative de modification d'une entrée alors que les champs Manager DN et le Password correspondant ne sont pas renseignés.

Erreurs lors de manipulations sous CPS

...NotImplemented...

Cette erreur ce produit à partir du moment où l'authentification LDAP est activée et tant que les annuaires ne sont pas basés sur LDAP.

TypeError: getGroupById() takes exactly 2 arguments (3 given)

Cette erreur ce produit à partir du moment où l'authentification LDAP est activée et tant que les annuaires ne sont pas basés sur LDAP.

KeyError: roles

Vérifier que l'attribut roles a bien été supprimé du schéma de portal_metadirectories/members.

STRONG_AUTH_REQUIRED...

Vérifier que la connexion au serveur LDAP est correcte (avec authentification) pour les dossier portal_metadirectories/members et portal_metadirectories/groups.

UNWILLING_TO_PERFORM: {'desc': 'DSA is unwilling to perform', 'info': 'referral missing'}

Vérifier que la connexion au LDAP est correctement paramétrée pour les annuaires (portal_metadirectories), notamment le champ Base DN.

NO_SUCH_OBJECT: {'desc': 'No such object', 'info': ''}

Vérifier que la connexion au LDAP est correctement paramétrée pour les annuaires (portal_metadirectories), notamment le champ Base DN.