Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jointure sur le username et authentification SAML Rocket.Chat #99

Open
leManu opened this issue Mar 8, 2021 · 4 comments
Open

Jointure sur le username et authentification SAML Rocket.Chat #99

leManu opened this issue Mar 8, 2021 · 4 comments

Comments

@leManu
Copy link

leManu commented Mar 8, 2021

Nous avons décelé un problème lié à la jointure sur le username avec l'authentification SAML dans RC. Le problème se traduit par cette erreur dans Moodle lors de la création d'une activité :

User elestrelin not exists in Rocket.Chat and was not succesfully created. Rocket.chat api Error 400 : [email protected] is already in use :( [error-field-unavailable]

    line 639 of /mod/rocketchat/classes/api/manager/rocket_chat_api_manager.php: call to debugging()
    line 233 of /mod/rocketchat/classes/api/manager/rocket_chat_api_manager.php: call to mod_rocketchat\api\manager\rocket_chat_api_manager::moodle_debugging_message()
    line 275 of /mod/rocketchat/classes/api/manager/rocket_chat_api_manager.php: call to mod_rocketchat\api\manager\rocket_chat_api_manager->enrol_user_to_group()
    line 471 of /mod/rocketchat/locallib.php: call to mod_rocketchat\api\manager\rocket_chat_api_manager->enrol_moderator_to_group()
    line 152 of /mod/rocketchat/locallib.php: call to mod_rocketchat_tools::enrol_user_to_rocketchat_group()
    line 106 of /mod/rocketchat/lib.php: call to mod_rocketchat_tools::enrol_all_concerned_users_to_rocketchat_group()
    line 128 of /course/modlib.php: call to rocketchat_add_instance()
    line 168 of /course/modedit.php: call to add_moduleinfo()

Ce qui se passe :

  • dans Moodle les utilisateurs sont créés par l'authentification CAS, le champ username est rempli avec l'uid LDAP; dans mon cas elestrelin
  • dans RC les utilisateurs sont créés par le plugin d'authentification SAML qui génère des username de la forme prenom.nom (grosso modo, même si c'est un peu plus complexe) (cf. Rocket.Chat Esup); dans mon cas emmanuel.lestrelin
  • lors de la création d'une activité RC, le plugin cherche a créer un utilisateur avec le username Moodle et l'adresse mail associée, mais celle-ci est déjà associée à un compte utilisateur avec un username différent

Quelques pistes de solutions :

  • on fait la jointure entre Moodle et RC sur le mail au lieu du username
  • on contraint RC à utiliser le même username que Moodle (à indiquer dans les pré-requis du plugin)
  • on contraint RC à utiliser le même mode d'authentification que Moodle (LDAP/LDAP ou CAS/CAS par exemple, à indiquer dans les pré-requis du plugin)
  • on limite l'utilisation du plugin aux instance Moodle utilisant CAS et aux instances RC utilisant CAS (à indiquer dans les pré-requis du plugin)

Je précise que l'intérêt de pouvoir modifier le username dans RC apparaît évident dans le cas de mentions, lorsque les uid LDAP sont de forme complexe, comme par exemple une combinaison d'initiales et de numéro étudiant ou de code employé. Bien entendu la recherche intégrée à RC peut aider, mais il est quand même plus simple pour un utilisateur de mémoriser james.bond que jb007 (je sais, c'est un parfait contre-exemple, mais vous aurez saisi l'esprit ;-p ).

De plus, dans le cas d'un RC avec sources d'authentification multiples (y compris comptes locaux), selon moi le seul attribut utilisateur qui est garanti "anti-collisions" c'est le mail.

@cperves
Copy link
Collaborator

cperves commented Mar 9, 2021

dans moodle le mail n'est plus forcément unique ($CFG->allowaccountssameemail)
par contre username+mnetid est unique

@cperves
Copy link
Collaborator

cperves commented Mar 9, 2021

A discuter car changer le plugin maintenant est problématique pour ceux qui sont déjà en prod

@leManu
Copy link
Author

leManu commented Mar 9, 2021

Dans ce cas pour éviter de casser la prod je propose d'ajouter un paramètre de configuration pour le plugin qui indique sur quel attribut utilisateur faire la jointure :

  • username (par défaut)
  • mail

Penses-tu que ce soit compliqué à implémenter ?

@cperves
Copy link
Collaborator

cperves commented Mar 12, 2021

un paramétrage permettra en effet de gérer les plfs déjà en place
pour le reste je ne vois pas trop l'impact pour l'instant
le soucis est surtout qu'en ce moment je n'ai pas du tout le temps de faire ce dev

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants