Project

General

Profile

Scénario #31512

Updated by Daniel Dehennin over 3 years ago

{{>toc}}

h3. Problème

Sur Scribe, nous avons deux sources de données qui ne peuvent pas être utilisées ensemble simplement :

* L’annuaire OpenLDAP contient les attributs Envole nécessaires à leur fonctionnement
* L’Active Directory contient le mot de passe et les informations de changement de mot de passe.

Actuellement, eole-SSO et LemonLDAP::NG ne permettent pas une utilisation totalement fonctionnelle des deux sources :

* Soit nous utilisons OpenLDAP et nous n’avons pas les informations d’obligation de changement de mot de passe
* Soit nous utilisons l’Active Directory et nous n’avons pas les attributs Envole

La détection de l’obligation de changement de mot de passe vient du mécanisme des "politiques de mot de passe LDAP":https://ldapwiki.com/wiki/Password%20Policy qui ne peut pas facilement être émulé en synchronisant des attributs de l’active directory vers OpenLDAP (impossible d’ajouter l’attribut *@pwdLastSet@* qui n’est défini par aucun schéma LDAP).

h3. Proposition

Les solutions SSO devraient, dans le cadre d’un fonctionnement mixte *AD* / *OpenLDAP* :

* Tenter d’authentifier l’utilisateur sur l’active directory et détecter le "besoin de changement de mot de passe":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/AD.pm#L45
* Procéder au changement de mot de passe sur l’active directory
* aller chercher les informations utilisateur dans l’OpenLDAP

h4. LemoLDAP::NG

Cette solution de SSO permet de "combinier des modules":https://lemonldap-ng.org/documentation/latest/authcombination.html, il est ainsi possible de déclarer :

* le module *@AD@* pour l’"authentification uniquement":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/AD.pm
* le module *@LDAP@* pour les "informations utilisateurs":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDB/LDAP.pm
* le module *@AD@* pour la "gestion du changement de mot de passe":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Password/AD.pm

L’inconvénient est que le module d’authentification *@AD@* ne fait pas lui même la recherche du *@DN@* de l’utilisateur qui est "délégué à son parent":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/LDAP.pm#L42 ce qui ne permet pas "d’avoir le même *@DN@* pour les deux bases":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2435

Un contournement pourrait être de déclarer un module d’authentification personnalisé, dérivé du module "AD":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/AD.pm qui prendrait en charge cette résolution mais il faut vérifier les interactions entre ces modules qui semblent partager la même source de *@DN@*:

* https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDB/LDAP.pm#L37
* https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/LDAP.pm#L79

Il semble donc qu’il faille créer un dérivé de ces deux modules afin de stocker le *@DN@* de chacun dans un attribut différent.

h4. EOLE SSO

*À DÉFINIR*

Back