Project

General

Profile

Scénario #31512

Gérer le changement de mot de passe des utilisateurs depuis les SSO web

Added by Daniel Dehennin 4 months ago. Updated 2 months ago.

Status:
Terminé (Sprint)
Priority:
Normal
Assigned To:
Category:
-
Start date:
01/12/2021
Due date:
02/19/2021
% Done:

100%

Story points:
-
Remaining (hours):
0.00 hour
Velocity based estimate:
Release:
Release relationship:
Auto

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 :

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:

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

  1. Déployer un aca.scribe-2.8.0-instance-AvecImport
  2. Installer le paquet eole-lemonldap-ng-scribe
  3. Activer LemonLDAP::NG : CreoleSet activerLemon oui
  4. Reconfigurer le serveur
  5. Regénérer les certificats pour prendre en compte les noms LemonLDAP::NG : /usr/share/creole/gen_certif.py -f
  6. Reconfigurer le serveur
  7. 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.
    
  8. Depuis le poste du testeur, se connecter à l’adresse https://auth.domscribe.ac-test.fr
  9. S’identifier avec le compte prof1 et le mot de passe défini précédemment

Subtasks

Tâche #31523: LemonLDAP::NG: tester l’implémentation d’un module d’authentification ScribeADFerméDaniel Dehennin

Tâche #31616: Intégrer le module d’authentification ScribeADFerméDaniel Dehennin

Tâche #31618: Adapter la configuration eole-lemonldap-ng pour utiliser le nouveau moduleFerméDaniel Dehennin

Tâche #31699: Modifier les modules LemonLDAP::NG afin de corriger le fonctionnement du changement de mot de passeFerméDaniel Dehennin

Tâche #31934: Valider et ajouter la vérification dans les tests SquashFerméJoël Cuissinat


Related issues

Related to Distribution EOLE - Scénario #31404: Synchronisation pwdLastSet pour gérer la demande de changement à la 1ere connexion Terminé (Sprint)
Related to EoleSSO - Scénario #31615: Gérer le changement de mot de passe des utilisateurs depuis EOLE SSO Terminé (Sprint) 02/22/2021 03/12/2021
Related to SSO - Scénario #31937: Vérifier le changement du mot de passe via LemonLDAP::NG à l'intérieur de l'etb1 Terminé (Sprint) 04/12/2021 04/23/2021

History

#1 Updated by Daniel Dehennin 4 months ago

  • Related to Scénario #31404: Synchronisation pwdLastSet pour gérer la demande de changement à la 1ere connexion added

#2 Updated by Daniel Dehennin 4 months ago

  • Description updated (diff)

#3 Updated by Daniel Dehennin 4 months 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 4 months ago

  • Description updated (diff)

#5 Updated by Daniel Dehennin 4 months ago

  • Description updated (diff)

#6 Updated by Bruno Boiget 4 months 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 3 months ago

  • Description updated (diff)
  • Release set to EOLE 2.8.0

La partie EoleSSO est reporté dans un scénario dédié (#31615).

#8 Updated by Daniel Dehennin 3 months ago

  • Release changed from EOLE 2.8.0 to EOLE 2.8.0.1

#9 Updated by Daniel Dehennin 3 months ago

  • Project changed from Distribution EOLE to SSO

#10 Updated by Daniel Dehennin 3 months ago

  • Target version changed from sprint 2021 02-04 Equipe MENSR to sprint 2021 05-07 Equipe MENSR

#11 Updated by Daniel Dehennin 3 months ago

  • Status changed from Nouveau to Résolu
  • Assigned To set to Daniel Dehennin

#12 Updated by Daniel Dehennin 3 months ago

  • Description updated (diff)

#13 Updated by Daniel Dehennin 3 months ago

  • Description updated (diff)

#14 Updated by Joël Cuissinat 2 months 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 2 months ago

  • Status changed from Résolu to Terminé (Sprint)

Also available in: Atom PDF