Projet

Général

Profil

Scénario #31512

Mis à jour par Daniel Dehennin il y a environ 3 ans

{{>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é du module d’authentification (@Scribe.pm@ ?) afin de rechercher le *@DN@* de l’AD dans un attribut différent. Peut-être aussi un dérivé du module de changement de mot de passe qui "utilise aussi le *@DN@*":https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/blob/master/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Password/AD.pm#L33.

h3. Pour tester

# Déployer un *@aca.scribe-2.8.0-instance-AvecImport@*
# Installer le paquet *@eole-lemonldap-ng-scribe@*
# Activer LemonLDAP::NG : *@CreoleSet activerLemon oui@*
# Reconfigurer le serveur
# Regénérer les certificats pour prendre en compte les noms LemonLDAP::NG : *@/usr/share/creole/gen_certif.py -f@*
# Reconfigurer le serveur
# Forcer le changement de mot de passe à la prochaine connexion pour un utilisateur
<pre>
root@scribe:~# SSH_AUTH_SOCK= ssh -t -o RequestTTY=yes -o IdentitiesOnly=yes addc samba-tool user setpassword --must-change-at-next-login prof1
New Password:
Retype Password:
Changed password OK
Connection to addc closed.
</pre>
# Depuis le poste du testeur, se connecter à l’adresse https://auth.domscribe.ac-test.fr
# S’identifier avec le compte *@prof1@* et le mot de passe défini précédemment

Retour