Dolibarr et SSO : erreurs fréquentes et solutions pour passer à l’échelle

Dolibarr& SSO : Erreurs fréquentes et solutions pour passer à l’échelle Auteur : [Votre Nom] – Architecte solutions open‑source Date : 3 novembre 2025

— ## 1. Introduction

Dolibarr est une suite d‑ERP / CRM très légère, écrite en PHP, qui s’installe généralement en mode « stand‑alone » ou « shared‑hosting ».
Dans les grandes organisations, l’accès aux applications métiers est de plus en plus centralisé via Single Sign‑On (SSO) : Azure AD, Keycloak, Okta, Google Workspace, etc.

Le passage du modèle d’authentification « login / mot de passe » vers le SSO apporte des bénéfices en termes de sécurité, de productivité et de gouvernance, mais il introduit également des pièges spécifiques à Dolibarr lorsqu’on veut le faire évoluer (stabilité, scalabilité, haute disponibilité).

Cet article passe en revue les erreurs les plus courantes rencontrées lors de l’intégration d’un SSO à Dolibarr, puis propose des solutions concrètes pour transformer votre déploiement en une plateforme prête à l’échelle d’une entreprise du 5 000 à 50 000 utilisateurs.


2. Le contexte SSO avec Dolibarr

Élément Description Pourquoi c’est critique pour Dolibarr
SSO provider Azure AD, Keycloak, Okta, Auth0, OneLogin, etc. Nécessite une configuration précise des redirect URIs et du client secret.
Entrepôt d’utilisateurs LDAP / Active Directory, base interne, base externe Dolibarr compte par défaut sur ses propres tables user/usergroup.
Gestion des groupes Mapper les groupes du fournisseur SSO → les groupes Dolibarr Sinon les autorisations ne sont pas synchronisées.
Web‑app mode Mode « Front‑controller » (tout passe par index.php) Nécessite que le callback du SSO soit autorisé dans les paramètres de sécurité.
Scalabilité Charge de plusieurs instances derrière un load‑balancer Le token ou la session doit être partagé (sticky‑sessions ou cache partagé).


3. Erreurs fréquentes

3.1. Configuration d’URL de callback incomplète

  • Symptôme : Après la redirection vers le provider SSO, le retour à Dolibarr se solde par « 403 – Invalid redirect_uri » ou boucle infinie de login.
  • Cause : L’URL configurée dans le client SSO ne correspond pas exactement à l’adresse publique du point d’entrée (ex. https://app.example.com/dolibarr/oauth2callback).
  • Piste : Vérifier la routage dans conf/conf.php (variable $_SERVER['REQUEST_URI']) et s’assurer que le même sous‑domaine et le même port sont utilisés.

3.2. Redirection HTTP/HTTPS mixte

  • Symptôme : Login fonctionne en HTTP mais échoue en HTTPS ou inversement, avec des erreurs « Invalid state token ».
  • Cause : Le provider SSO attend un redirect_uri exactement identique au schéma (http vs https).
  • Solution : Forcer le protocole via .htaccess ou le serveur web (RewriteCond %{HTTPS} off).

3.3. Confusion entre client_id et client_secret

  • Symptôme : Erreur 401 : invalid_client lors du premier échange OAuth.
  • Cause : Le secret n’est pas stocké dans le fichier de configuration ou des caractères invisibles sont présents.
  • Solution : Copier le secret depuis le provider sans espaces ; le placer dans conf/conf.php ($conf['oauth']['client_secret']).

3.4. Mappage des groupes d’utilisateurs inexistant – Symptôme : Les utilisateurs sont bien authentifiés, mais leurs droits restent « Guest ».

  • Cause : Le script de synchronisation de groupes (groupsync.php) ne trouve aucun groupe correspondant dans Dolibarr → groupes par défaut vide.
  • Remède : Créer manuellement des groupes correspondants ou activer l’extension Automatic Group Sync (ex. plugins/groupmanager). ### 3.5. Session partagée entre plusieurs instances

  • Symptôme : Les utilisateurs sont régulièrement déconnectés lorsqu’ils sont redirigés d’une instance à l’autre (load‑balancer).
  • Cause : Les cookies de session (PHPSESSID) ne sont pas persistés de façon partagée (pas de cache Redis ou de fichier de session partagé).
  • Solution : Configurer PHP ou Nginx pour stocker les sessions en Redis ou Memcached (voir § 5).

3.6. Problèmes de scaling du cache et des assets

  • Symptôme : Chargement lent des pages après le déploiement de plusieurs serveurs ; erreurs « 500 – Internal Server Error » pendant les pics de trafic.
  • Cause : Les fichiers de configuration (conf/*.php) sont écrits en dur sur chaque nœud, ce qui empêche la propagation dynamique des changements de paramètres de SSO.
  • Solution : Externaliser la configuration vers un volume partagé (NFS, S3‑compatible bucket) ou utiliser un framework de configuration (ex. ansible + templates).

3.7. Utilisation d’une version ancienne de Dolibarr

  • Symptôme : Des bugs d’authentification SSO remontent dès la version 0.9 – 0.10.
  • Cause : Support limité du PKCE et d’utilisation de l’option response_type=code uniquement.
  • Remède : Migrer dès que possible vers la branche 15.x (ou ultérieure) où le module OAuth est maintenu à jour.


4. Guide pas‑à‑pas : Implémenter correctement le SSO avec Dolibarr ### 4.1. Prérequis

Prérequis Détails
Dolibarr ≥ 15.x Support complet des endpoints OAuth2 et des paramètres de security.
Web‑server (Nginx/Apache) Rewrite rules actifs et possibilité de configurer proxy_set_header.
HTTPS Termination TLS au load‑balancer (pas de redirection mixte).
Base de données MySQL/MariaDB ou PostgreSQL compatible.
Cache partagé Redis ou Memcached (optionnel mais recommandé).
IdP (SSO) Azure AD, Keycloak, ou tout autre fournisseur compatible OpenID Connect / OAuth2.

4.2. Étapes d’intégration

  1. Enregistrement du client SSO

    • Dans le provider, créer un client « Dolibarr ».
    • Redirect URI : https://app.example.com/dolibarr/oauth2callback (et le même en HTTP uniquement si vous avez désactivé HTTPS).
    • Noter Client ID et Client Secret.

  2. Configuration de Dolibarr
    Ajouter dans conf/conf.php (ou dans le fichier de configuration dédié) :

    $conf['oauth']['enabled']      = true;
    $conf['oauth']['provider'] = 'openid'; // ou 'azuread' / 'keycloak'
    $conf['oauth']['client_id'] = 'YOUR_CLIENT_ID';
    $conf['oauth']['client_secret']= 'YOUR_CLIENT_SECRET';
    $conf['oauth']['callback_url'] = 'https://app.example.com/dolibarr/oauth2callback';
    $conf['oauth']['scope'] = 'openid email profile groups';
    $conf['oauth']['token_endpoint'] = 'https://provider.com/oauth2/token';
    $conf['oauth']['authorization_endpoint'] = 'https://provider.com/oauth2/authorize';
    $conf['oauth']['userinfo_endpoint'] = 'https://provider.com/userinfo';

  3. Mappage des groupes

    • Créer les groupes dans Dolibarr qui correspondent aux groupes du provider (ex. HR, IT).
    • Installer le plugin GroupMapper (plugins/groupmapper) et configurer les règles d’appariement (ex. group_name = displayName).

  4. Synchronisation périodique

    • Mettre en place un cron qui interroge l’API du provider (/groups) et met à jour les groupes Dolibarr.
    • Exemple de script /path/to/dolibarr/scripts/groupsync.php :

    « `bash /15 * php /var/www/dolibarr/scripts/groupsync.php >> /var/log/dolibarr/groupsync.log 2>&1

  5. Partage de session

    • Installer Redis et activer la persistance des sessions : « `ini
      ; php.ini
      session.save_handler = redis
      session.save_path = "tcp://127.0.0.1:6379"

    • En cas d’utilisation d’un load‑balancer avec sticky sessions, désactiver le mode « session‑stickiness » et se reposer sur Redis pour la continuité.

  6. Externalisation de la configuration

    • Ranger tous les fichiers conf/*.php dans un répertoire partagé (/srv/dolibarr/config/). – Utiliser un outil d’infrastructure comme Ansible pour injecter les variables d’environnement ({{ oauth_client_id }} etc.) au moment du déploiement. ### 4.3. Test fonctionnel

Test Action attendue Critère de succès
Login via SSO Redirection du navigateur vers le provider, authentification, retour dans Dolibarr avec l’UID du user connu. Page d’accueil affichée, user dans la base a été créé, rôle correct.
Logout Logout du provider, suivi d’une déconnexion locale. Redirection vers la page de login du provider, puis retour au portail SSO.
Group Sync Utilisateur qui appartient au groupe IT dans le provider est automatiquement mis dans le groupe IT de Dolibarr. Vérifier usergroup dans la DB ou via l’interface.
Load‑balancer Session persistance via Redis assure que le second appel profite du même backend. Aucun 500 ou session expired quand on change de serveur.


5. Solutions pour passer à l’échelle

5.1. Architecture proposée pour le scaling horizontal

+----------------------+          +----------------------+          +----------------------+
| Load Balancer (LB) | <----> | Front‑end 1 (Dol) | <----> | Front‑end 2 (Dol) |
| (path /dolibarr) | | (PHP-FPM) | | (PHP-FPM) |
+----------------------+ +----------------------+ +----------------------+
| | |
v v v
+-------------------+ +-------------------+ +-------------------+
| Redis Cluster | <------> | PHP Session Store| | Shared Config |
+-------------------+ +-------------------+ +-------------------+
|
v
+-------------------+
| Database (HA) |
+-------------------+

  • LB : Terminaison TLS, réécriture du chemin /dolibarr/* vers /src/index.php.
  • Front‑end : Serveurs PHP‑FPM identiques, scalables via Kubernetes HPA.
  • Redis : Cache de sessions, files d’activités, lock‑manager.
  • DB : Cluster maître‑esclave ou Galera pour la haute disponibilité.
  • Config partagée : /srv/dolibarr/config/ monté en NFS ou via Ceph.

5.2. Gestion du cache de performance

Cache Fonction Configuration recommandée pour le scaling
OPcache Bytecode compilé opcache.enable=1 (global, pas besoin de partage).
APCu Variables partagées entre processus Désactiver sur serveur multi‑node (pas partagé).
Redis Sessions + token storage maxmemory 2gb, maxmemory-policy allkeys-lru.
Varnish (optionnel) Cache HTTP frontales backend dédié à chaque front‑end, TTL 300 s.

5.3. Déploiement automatisé

5.3.1. Dockerisation (Docker‑Compose) – point de départ

version: "3.8"
services:
web:
image: dolibarr/dolibarr:latest
environment:
- DOUSER=www-data
- DOgroup=www-data
- OAUTH_CLIENT_ID=${OAID}
- OAUTH_CLIENT_SECRET=${OAS}
- OAUTH_PROVIDER=${PROV}
- OAUTH_CALLBACK_URL=https://lb.example.com/dolibarr/oauth2callback
volumes:
- ./config:/srv/dolibarr/conf
- redis-data:/data
depends_on: [php-fpm, redis]
ports: ["80:80"]
php-fpm:
image: php:8.2-fpm
...
redis:
image: redis:7-alpine command: ["redis-server","--save","","--appendonly","no"]
volumes: ["redis-data:/data"]
volumes:
redis-data:

  • Le fichier config/conf.php reste monté et partag\u00e9 entre toutes les réplications.
  • La configuration de OAUTH_* peut être injectée par Secrets Manager (AWS) ou Vault (HashiCorp).

5.3.2. Kubernetes (Helm chart) – pour la production

  • Utiliser le chart community helmrepo/dolibarr (ou créer un chart custom).
  • Paramétrer les ConfigMaps pour conf/*.php et les Secrets pour les credentials OAuth.
  • Déployer Redis‑Cluster via le chart bitnami/rediscluster.
  • Activer ClusterIP + Ingress avec path‑based routing (/dolibarr).


6. Bonnes pratiques supplémentaires

Domaine Bonnes pratiques
Sécurité – Toujours forcer TLS.
– Utiliser le PKCE si le client est public (ex. mobile).
– Limiter le scope du token à openid profile.
Monitoring – Activer le logging des échanges OAuth (/var/log/dolibarr/oauth.log).
– Créer des alertes sur session timeout > 24 h.
Testing – Utiliser les environnements staging avec un mock provider (ex. localhost:8080/keycloak).
– Simuler un pic de 10 000 requêtes avec k6 ou ab.
Documentation – Créer un Runbook qui liste les étapes de reset du cache Redis et de re‑synchronisation des groupes.
Versioning – Planifier une migration semestrielle vers la dernière branche LTS de Dolibarr (actuellement 18.x).


7. Checklist de mise en production

Action Responsable
1 Créer le client OAuth dans le provider SSO avec le callback exact. Admin SSO
2 Déployer la version ≥ 15.x de Dolibarr (Docker/K8s). DevOps
3 Injecter les variables OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET via Secrets. SecOps
4 Configurer Redis pour les sessions et les tokens. Infra
5 Mettre en place le cron de synchronisation des groupes. DBA
6 Tester le login, gruppen sync, logout en boucle (10 min). QA
7 Vérifier la persistance de session via plusieurs serveurs LB. Infra
8 Activer le monitoring (metrics Prometheus, logs). SRE
9 Documenter le runbook de restauration (cache, DB, config). Ops
10 Planifier la migration des comptes existants (import LDAP → SSO). IAM Team


8. Conclusion

Le passage à l’échelle d’une application Dolibarr lorsqu’elle est couplée à un SSO ne réside pas seulement dans la configuration du provider, mais surtout dans la gestion unifiée des sessions, des groupes et de la configuration.

  • Les erreurs les plus récurrentes (callback URL, protocole mixte, token secret mal stocké, absence de partage de session) sont toutes résolubles en suivant un processus méthodique.
  • En adoptant une architecture container‑first avec Redis comme backing store, configuration partagée et automation (Docker/K8s + Helm), il devient possible de supporter des milliers d’utilisateurs tout en conservant la simplicité d’utilisation de Dolibarr.

En appliquant les solutions présentées (mappage des groupes, persistance de session, externalisation des paramètres de sécurité, monitoring et automatisation), vous transformerez votre déploiement initial « demo » en une plateforme robuste, sécurisée et prête à l’échelle pour toute l’entreprise.

À retenir : Éviter les pièges dès le premier jour, c’est gagner du temps sur chaque nouveau serveur que vous ajouterez au futur.


Sources : – Dolibarr Documentation – Chapter OAuth & SSO (v15‑18).

  • OIDC RFC 8414 – Best‑practice recommandations.
  • Experience interne @ [Nom de votre société] – 2023‑2025 projets SSO.


Vous avez d’autres questions ? N’hésitez pas à me contacter via LinkedIn ou à me laisser un commentaire ci‑dessous.

Publications similaires