Scénario #31512
Gérer le changement de mot de passe des utilisateurs depuis les SSO web
100%
Description
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 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).
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
- Procéder au changement de mot de passe sur l’active directory
- aller chercher les informations utilisateur dans l’OpenLDAP
LemoLDAP::NG¶
Cette solution de SSO permet de combinier des modules, il est ainsi possible de déclarer :
- le module
AD
pour l’authentification uniquement - le module
LDAP
pour les informations utilisateurs - le module
AD
pour la gestion du changement de mot de passe
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 ce qui ne permet pas d’avoir le même DN
pour les deux bases
Un contournement pourrait être de déclarer un module d’authentification personnalisé, dérivé du module AD 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
.
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
root@scribe:~# SSH_AUTH_SOCK= ssh -t -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.
- 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
Sous-tâches
Demandes liées
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Lié à Proposition Scénario #31404: Synchronisation pwdLastSet pour gérer la demande de changement à la 1ere connexion ajouté
#2 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Description mis à jour (diff)
#3 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Echéance mis à 29/01/2021
- Version cible mis à sprint 2021 02-04 Equipe MENSR
- Début mis à 11/01/2021
#4 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Description mis à jour (diff)
#5 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Description mis à jour (diff)
#6 Mis à jour par Bruno Boiget il y a environ 3 ans
Pour la partie EoleSSO, cela demandera un peu de travail. On peut imaginer une solution de ce type :
- dans les variables de configuration des annuaires LDAP d'eoleSSO, permettre de déclarer un annuaire AD.
Dans ce cas, il faudrait à première vue ajouter les informations suivantes :- adresse du serveur AD
- branche de recherche des utilisateurs dans AD (ex:
CN=Users,DC=domscribe,DC=ac-test,DC=fr
)
- dans python-eoleldaptor, créer par exmple une classe eoleadproxy héritant de eoleldapproxy.
- la méthode authenticate de cette classe ferait un premier test de connexion sur l'annuaire AD (recherche DN + bind) afin de remonter l'exception AD en cas d'échec d'authentification.
- Si pas d'erreur, enchainer sur la méthode authenticate d'eoleldapproxy pour reprendre le fonctionnement classique sur l'annuaire ldap.
- au niveau d'eoleSSO, prévoir 3 résultats possibles au niveau de l'authentification (ok/echec/changement password requis) et faire remonter l'info jusqu'au frontend pour afficher le message voulu.
Le travail impacterait principalement les fichiers ssoshare/authserver.py, eolesso/dataproxy.py et authform.py pour le côté frontend. Le plus difficile étant de gérer l'aspect callback hell
du code :-)
Cette solution peut fonctionner sur un module de type scribe AD, ça parait plus compliqué dans le cas d'annuaires multi-établissement ou répliqués (je ne sais pas si il y a des cas d'usage en mode AD).
#7 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Description mis à jour (diff)
- Release mis à EOLE 2.8.0
#8 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Release changé de EOLE 2.8.0 à EOLE 2.8.0.1
#9 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Projet changé de Distribution EOLE à SSO
#10 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Version cible changé de sprint 2021 02-04 Equipe MENSR à sprint 2021 05-07 Equipe MENSR
#11 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Statut changé de Nouveau à Résolu
- Assigné à mis à Daniel Dehennin
#12 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Description mis à jour (diff)
#13 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Description mis à jour (diff)
#14 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Lié à Scénario #31937: Vérifier le changement du mot de passe via LemonLDAP::NG à l'intérieur de l'etb1 ajouté
#15 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Statut changé de Résolu à Terminé (Sprint)