Installation et configuration d'un serveur XMPP avec JCMS

1. Le module WebChat

Le module WebChat contient un connecteur XMPP qui permet d'interfacer JCMS avec une solution de messagerie instantanée utilisant le protocole XMPP.

Cet article présente l'installation et la configuration du connecteur XMPP avec OpenFire, vous pouvez télécharger la version .exe  ou la version .zip. OpenFire est un serveur XMPP Open Source. Le module WebChat a été certifié sur ce serveur et fournit un composant OpenFire pour gérer l'authentification des utilisateurs. Le client XMPP Pidgin sera utilisé à titre d'exemple.

2. Architecture générale

Le schéma ci-dessous illustre l'architecture générale de la solution.

Les clients XMPP sont installés sur les postes des utilisateurs connectés avec le serveur OpenFire. Celui-ci est en relation avec JCMS et stocke ses données dans le même SGBDR que JCMS (mais dans une base qui lui est propre).

JCMS est lui-même un client XMPP. A ce titre, il dispose d'un compte XMPP dans le serveur OpenFire. La liaison entre JCMS et OpenFire présente plusieurs rôles :

  • OpenFire notifie JCMS des états de présence des utilisateurs (protocole XMPP)
  • OpenFire interroge JCMS lors des authentifications (OpenAPI via le protocole http)
  • JCMS envoie des messages à OpenFire pour les notifications.

3. Schéma de l'authentification XMPP avec JCMS

Le module WebChat fournit un composant d'authentification à installer dans le serveur Openfire. Le schéma ci-dessous illustre les échanges réalisés pour effectuer l'authentification.

schema auth xmpp

4. Installation du serveur OpenFire

4.1. Installation d'OpenFire à partir du tar.gz

Une installation d'OpenFire peut être disponible par le gestionnaire de paquet de votre système d'exploitation.

Dans le cas où OpenFire est installé de cette façon, vous pouvez ignorer cette étape.

Télécharger le package OpenFire.

cd /opt
wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4_1_1.tar.gz

Le désarchiver dans le répertoire /opt/.

tar zxvf openfire_4_1_1.tar.gz

Paramétrer le démarrage automatique :

ln -s /opt/openfire/bin/Openfire /etc/init.d/
chmod +x /etc/init.d/openfire
update-rc.d openfire

4.2. Configuration

Configurer votre firewall pour autoriser les échanges sur les ports 5222, 5223, 5269, 7777 et 9090.

Par exemple si vous utilisez iptables, ajouter les lignes suivantes à la configuration /etc/network/iptables.rules.

...
# Ports de CHAT
-A INPUT -p tcp -m state --state NEW --dport 5222 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 5223 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 5269 -j ACCEPT

## Transfert de fichier
-A INPUT -p tcp -m state --state NEW --dport 7777 -j ACCEPT
## Port de configuration
-A INPUT -p tcp -m state --state NEW --dport 9090 -j ACCEPT
...

Création de l'utilisateur et de la base de données OpenFire :

su -l postgres
root@xmpp-server.example.com:/# su - postgres
postgres@xmpp-server.example.com:~$ createuser
Enter name of role to add: openfire
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
postgres@xmpp-server.example.com:~$ createdb -O openfire -E UNICODE openfire

Changement du mot de passe :

postgres@xmpp-server.example.com:~$ psql
postgres=# alter user openfire password '123456';
postgres=# \q

ATTENTION : ne pas utiliser le script de création du schéma fourni avec OpenFire (/opt/openfire/resources/database/Openfire_postgresql.sql), sinon le paramétrage de la base via la page WEB d'administration retournera une erreur.

Lancer le paramétrage du serveur OpenFire via : http://xmpp-server.example.com:9090/ avec les informations suivantes (pour un domaine XMPP example.com) :

ATTENTION : le nom de domaine à choisir (par défaut le nom de la machine) est le 2ème composant de l'identifiant xmpp : <login>@<domain XMPP>.

Nom du serveur : xmpp-server.example.com
URL de la base de données : jdbc:postgresql://xmpp-server.example.com:5432/openfire
Utilisateur : openfire
Mot de passe : 123456
login administrateur : openfire
adresse Email de l'administrateur : openfire@example.com
Mot de passe administrateur : 456789

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Il est déconseillé d'utiliser le compte administrateur nommé admin pour OpenFire car ce dernier peut entrer en conflit avec l'utilisateur admin de JCMS. Il faut donc créer un compte OpenFire nommé "openfire" et le déclarer comme administrateur du serveur XMPP.

 

 

Création de l'utilisateur JCMS dans la console d'administration du serveur OpenFire :

login : jcms
mot de passe : 987654

ATTENTION : OpenFire possède un bug concernant la gestion des logs. En effet les logs sont écrits dans le répertoire /logs (à la racine de l'OS) et non dans le répertoire <OpenFire>/logs comme cela devrait l'être. Il faut donc créer le répertoire /logs comme étant un lien symbolique vers <OpenFire>/logs.

sudo ln -s /opt/openfire/logs /logs

5. Installation du composant d'authentification JCMS

Une clé d'authentification (authkey) doit être générée sur JCMS pour permettre à OpenFire de valider les authentifications.

Pour cela, aller sur l'espace d'administration de JCMS dans la section "Génération de clé d'authentification". Générer une nouvelle clé avec les paramètres suivants :

  • URL : http://<serveur-JCMS>:<port>/<contextRoot>
  • Mode : préfixe d'URL
  • HTTP Method : GET
  • Utilisateur : admin
  • Durée : illimité (10 ans par exemple)
  • IP : si vous le souhaitez vous pouvez restreindre l'utilisation de cette authkey à l'adresse IP du serveur OpenFire

Pour plus d'information sur la génération des authkey, consultez la documentation administrateur de JCMS.

Activer l'Open API du serveur JCMS. Pour cela, aller dans Espace d'administration > Propriétés > Services Web > Open API.

Télécharger l'archive JcmsAuthProvider.zip.
Décompresser cette archive dans /opt/openfire/lib/.

Exécuter dans la base d'OpenFire le script openfire_jcms_configuration.sql.

$ su -l postgresql
$ psql -h localhost -U openfire openfire
openfire=> \i /tmp/openfire_jcms.sql

Redémarrer OpenFire.

Ajouter les deux propriétés suivantes via l'interface d'openfire (Serveur -> Gestion du serveur -> Propriétés du Système) :

  • jcmsAuthProvider.memberAuthKey
  • jcmsAuthProvider.url

Dans le champ Valeur de la propriété indiqué l'AuthKey que vous avez généré ainsi que l'url de votre site.

 

Redémarrer OpenFire

6. Configuration du module Connecteur XMPP

Dans JCMS, le module WebChat doit être configuré avec les paramètres suivants :

  • Identifiant du robot: jcms
  • Mot de passe du robot : 987654
  • Serveur XMPP: xmpp-server.example.com
  • Domaine XMPP : Nom du domaine XMPP (ex. example.com)

7. Test et validation

Le module WebChat fournit une interface pour vérifier la configuration.

Aller dans la page Espace d'administration > Supervision > WebChat > Actions

Cliquer sur le lien "Tester la configuration XMPP".

9. Configuration du client XMPP : Pidgin (optionnelle)

9.1 Installation et configuration

Télécharger le logiciel à l'adresse http://www.pidgin.im/download/.

Démarrer l'installation du logiciel en exécutant le fichier téléchargé.

 

 

Choisir une installation en français.

 

 

Cliquer sur "Suivant".

 

 

Cliquer sur "Suivant" pour accepter la licence.

 

 

Accepter les options par défaut.

 

 

Cliquer sur "Installer".

 

 

Attendre la fin de l'installation.

 

 

Cliquer sur "Suivant".

 

 

Pidgin s'ouvre et un paramètrage est nécessaire.

Dans cet exemple, le paramètrage est effectué avec un domaine jalios.net. L'identifiant XMPP est donc de la forme <login JCMS>@jalios.net.

 

 

Cliquer sur "Ajouter".

 

 

Sélectionner le protocole XMPP et saisir dans le champ utilisateur le login XMPP, et dans le champ domaine le domaine XMPP.

Puis, saisir le mot de passe et un alias local (utilisé pour l'affichage du compte).

Ensuite dans le cas où la configuration DNS n'aurait pas été faite, sélectionner l'onglet "Avancé" et préciser le serveur XMPP associé dans le champ "Serveur de connexion".

 

 

Cliquer sur "Ajouter".

 

 

Le logo XMPP doit se colorer, indiquant que la connexion est effective.

Cliquer alors sur "Fermer".

Il faut maintenant ajouter un contact pour pouvoir démarrer une discussion.

Aller dans le menu "Contacts" et cliquer sur "Ajouter un contact".

 

 

Entrer l'identifiant XMPP du contact (<nom>@<domaine XMPP>).

 

 

Cliquer sur "Ajouter".

Le contact doit apparaitre dans la liste.

 

 

9.2 Test et validation

Avant d'effectuer les tests coté JCMS (présence et communication), il est conseillé de réinitialiser le "roster" du compte JCMS (dans l'interface d'administration de OpenFire) et de relancer JCMS.

Ajouter le contact jcms@<domaine XMPP> en suivant les instructions présentées lors de l'installation du client et accepter les demandes de notifications présentées par Pidgin.

Envoyer un message à JCMS, il doit répondre un message indiquant qu'il est un robot (ex. "Je suis un Robot JCMS. Vous avez dit: test"). 

L'ensemble de la solution de messagerie instantanée est configuré et opérationnel. Vous pouvez désormais discuter avec d'autres utilisateurs de JCMS.