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
Subtasks
Related issues
History
#1 Updated by Daniel Dehennin over 2 years ago
- Related to Proposition Scénario #31404: Synchronisation pwdLastSet pour gérer la demande de changement à la 1ere connexion added
#2 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
#3 Updated by Daniel Dehennin over 2 years ago
- Due date set to 01/29/2021
- Target version set to sprint 2021 02-04 Equipe MENSR
- Start date set to 01/11/2021
#4 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
#5 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
#6 Updated by Bruno Boiget over 2 years ago
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 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
- Release set to EOLE 2.8.0
#8 Updated by Daniel Dehennin over 2 years ago
- Release changed from EOLE 2.8.0 to EOLE 2.8.0.1
#9 Updated by Daniel Dehennin over 2 years ago
- Project changed from Distribution EOLE to SSO
#10 Updated by Daniel Dehennin over 2 years ago
- Target version changed from sprint 2021 02-04 Equipe MENSR to sprint 2021 05-07 Equipe MENSR
#11 Updated by Daniel Dehennin over 2 years ago
- Status changed from Nouveau to Résolu
- Assigned To set to Daniel Dehennin
#12 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
#13 Updated by Daniel Dehennin over 2 years ago
- Description updated (diff)
#14 Updated by Joël Cuissinat about 2 years ago
- Related to Scénario #31937: Vérifier le changement du mot de passe via LemonLDAP::NG à l'intérieur de l'etb1 added
#15 Updated by Joël Cuissinat about 2 years ago
- Status changed from Résolu to Terminé (Sprint)