J'ai besoin de... associer un compte utilisateur Rocket.chat à un LDAP

Au niveau de la structure où je travaille et après une forte demande des utilisateurs de disposer d’un outil de discussions à la Slack, j’ai fait une analyse des solutions gratuites et open source de discussion pour voir ce que je pouvais mettre en place. Après une étude des différentes solutions du marché, je suis arrivé au choix d’utiliser l’application Rocket.chat.

Rocket.chat propose une version open source qui est déployable sur un serveur. Plusieurs points m’ont fait choisir Rocket.chat que je liste ci-dessous :

  • forte communauté sur Github (24000 étoiles) ;
  • clients mobiles ;
  • facilité d’installation à partir de Docker ;
  • interface utilisateur très agréable ;
  • installable sur un serveur ;
  • documentation détaillée.

L’installation de Rocket.chat est simple et je me suis basé sur cette page : https://rocket.chat/docs/installation/docker-containers. Je ne détaillerai pas cette partie puisque la documentation est très bien faite.

Je me suis toutefois heurté à un problème lors de la création des comptes utilisateurs. Rocket.chat permet de se connecter à un LDAP et de lancer un processus de création automatique de comptes utilisateurs. Je ne peux pas intervenir directement sur le LDAP (lecture seule) pour restreindre le sous ensemble de comptes que je souhaite créer (par exemple via un champ spécifique). Ainsi, via la création automatique, je me suis retrouvé à créer un grand nombre de comptes utilisateurs qui pour la plupart n’auront pas le droit d’accéder à ce serice de discussion. Des outils comme Redmine par exemple font les choses bien car ils peuvent créer à la volée les comptes utilisateurs depuis LDAP.

Dans ce billet, j’explique comment créer un compte utilisateur sous Rocket.chat et comment l’associer à postériori à LDAP sans avoir à passer par une étape d’importation et de création de comptes massives. Attention, c’est une procédure manuelle, mais dans mon cas, le faible nombre de comptes utilisateurs n’est pas gênant et je peux me permettre de le faire (moins de 10 comptes par an).

Étape 0 : configuration de LDAP (à faire une fois)

Cette configuration est à adapter selon les préférences de votre serveur LDAP. À ne faire qu’une seule fois.

  • Ouvrir l’interface Administration de Rocket.chat (sous entendu que vous avez un accès administrateur), puis choisir LDAP.

  • Configurer LDAP comme précisé ci-dessous (en adpatant par rapport à votre existant).

    • Général
      • Enable: True
      • Host: ldap.mycompagny.fr
      • Base DN: ou=people, dc=mycompany, dc=fr
    • Sync / Import
      • Username Field: uid
      • Default Domain: mycompagny.fr
      • Merge Existing Users: False
      • User Data Field Map: {"cn":"name", "mail":"email"}
    • User Search
      • Filter:
      • Search Field: uid

Étape 1 : création du compte classique

Pour la suite, on considère que sur le LDAP, il existe un compte contenant les informations suivantes :

  • uid: duponto
  • cn: DUPONT Olivier
  • mail: olivier.dupont@mycompagny.fr

Les champs précédents, si différents dans votre LDAP, devront correspondre aux informations saisies dans la configuration.

  • Ouvrir l’interface Administration, puis choisir Users.

  • Créer le nouvel utilisateur Olivier DUPONT en respectant les informations contenues dans le LDAP.

    • Name: DUPONT Olivier
    • Username: duponto
    • Password: cliquer sur le bouton Random

Étape 2 : modification du compte depuis la base Mongo

Rocket.chat stocke les informations dans une base de données Mongo. Pour connecter le compte utilisateur créé sous Rocket.chat avec le compte sous LDAP, il suffira d’ajouter pour le compte un nouveau champ ldap avec la valeur à true.

Ci-desous la requête Mongo permettant d’ajouter ce champ.

1
db.users.update({username:"duponto"}, {"$set":{'ldap':true}})

La même requête si vous utilisez Docker pour le déploiement où rocketchat_mongo_1 est le nom du conteneur Mongo pour Docker.

1
docker exec -it rocketchat_mongo_1 mongo --eval 'db.users.update({username:"duponto"}, {"$set":{'ldap':true}})' rocketchat

Pour vérifier que le champ a été correctement ajouté, exécuter la requête suivante.

1
db.users.find({username:"duponto"}).pretty()

La même requête si vous utilisez Docker pour le déploiement où rocketchat_mongo_1 est le nom du conteneur Mongo pour Docker.

1
docker exec -it rocketchat_mongo_1 mongo --eval 'db.users.find({username:"duponto"}).pretty()' rocketchat

Conclusion

Pour se connecter, l’utilisateur pourra soit utiliser son Username (duponto) soit utiliser son email (olivier.dupont@mycompagny.fr) comme identifiant. Pour le mot de passe, il pourra utiliser soit le mot de passe du LDAP soit le mot de passe du compte.

Pour chaque nouvel utilisateur à créer, il faudra réitérer les étapes 1 et 2.

C’est une solution qui fonctionne bien depuis la mise en production du service. L’avantage est de pouvoir mélanger des comptes qui ne sont pas sur le LDAP et des comptes sur LDAP.

Bien entendu, l’idée serait de pouvroir profiter d’une boite à cocher LDAP directement lors de la création du compte depuis Rocket.chat.

Ce billet est open source. Vous avez noté un problème de typographie ?
Ou quelque chose d'obscur ? Améliorer ce billet à partir du dépôt GitHub.
Commentaire

Vous pouvez laisser un commentaire en répondant à ce Tweet.

Je suis Mickaël BARON Ingénieur de Recherche en Informatique 💻 au @LIAS_LAB le jour 🌞
Responsable de zones #Java sur @javaDeveloppez la nuit 🌚
❤️ #Java #Docker #VueJS #Eclipse #Services #WebSemantic