Architecture multi-tenant avec Auth0 : organisations, isolation et bonnes pratiques
B2B SaaS ? Auth0 Organizations permet d'isoler chaque client avec ses propres connexions, branding et membres. Architecture, limites et alternatives.
Par Auth0.Expert · 2025-02-10 · 13 min de lecture
Architecture multi-tenant avec Auth0 Organizations
TL;DR
Auth0 Organizations (feature Enterprise) permet de gérer des dizaines ou centaines de clients dans un seul tenant Auth0, avec isolation des connexions SSO, branding personnalisé et gestion des rôles par organisation.
---
Le problème multi-tenant
En B2B SaaS, chaque client veut :
- Son propre SSO (Azure AD, Google Workspace, Okta)
- Ses propres utilisateurs isolés des autres clients
- Un branding personnalisé sur la page de login
- Des rôles différents dans votre application
Avant Auth0 Organizations, les équipes créaient un tenant Auth0 par client → explosion des coûts et de la complexité opérationnelle.
---
Pour comprendre comment Auth0 simplifie la gestion multi-clients, observons leur organisation interne via "Organizations".
Architecture avec Organizations
Ce schéma montre comment une seule instance Auth0 peut héberger plusieurs organisations isolées, chacune avec sa propre connexion, membres et rôles.
Auth0 Tenant (unique)
├── Organization: acme-corp
│ ├── Connection: Azure AD (acme.onmicrosoft.com)
│ ├── Members: [email protected], [email protected]
│ └── Roles: admin, viewer
├── Organization: beta-inc
│ ├── Connection: Google Workspace
│ └── Members: [email protected]
└── Organization: gamma-ltd
├── Connection: Okta
└── Members: [email protected]
---
Pour automatiser la création d'une nouvelle organization, utilisez l'API Auth0 comme ci-dessous.
Créer une Organization via l'API
Ce bloc de code envoie une requête REST à l’API de gestion Auth0 pour créer une Organization avec un affichage et un branding personnalisés.
curl -X POST https://YOUR_DOMAIN.auth0.com/api/v2/organizations -H "Authorization: Bearer $MGMT_TOKEN" -H "Content-Type: application/json" -d '{
"name": "acme-corp",
"display_name": "ACME Corporation",
"branding": {
"logo_url": "https://acme.com/logo.png",
"colors": {
"primary": "#0052CC",
"page_background": "#FFFFFF"
}
},
"metadata": {
"plan": "enterprise",
"contract_id": "CTR-2025-001"
}
}'
Cette commande automatise l’onboarding d’un nouveau client B2B avec tout son branding dans Auth0.
---
Pour lier une connexion SSO spécifique à une organization, il suffit d'utiliser cette requête API.
Connexion SSO par Organization
Ce code permet d’associer une connexion (ici Azure AD) à une organization afin que seules ses membres puissent se connecter avec leur propre fournisseur.
# Associer une connexion Azure AD à une organization
curl -X POST "https://YOUR_DOMAIN.auth0.com/api/v2/organizations/ORG_ID/enabled_connections" -H "Authorization: Bearer $MGMT_TOKEN" -H "Content-Type: application/json" -d '{
"connection_id": "con_azure_ad_xxx",
"assign_membership_on_login": true,
"is_signup_enabled": false
}'
---
Pour cibler l'organisation lors du login ou laisser Auth0 la gérer, il faut spécifier certains paramètres dans le flux d'authentification.
Paramètre organization dans le flux login
Ce code JavaScript construit une URL de connexion OAuth/OIDC qui force l’authentification au sein d’une organisation précise (SSO multi-organisation).
// Forcer le login dans une organisation spécifique
const params = new URLSearchParams({
response_type: 'code',
client_id: CLIENT_ID,
redirect_uri: 'https://app.example.com/callback',
scope: 'openid email',
organization: 'org_abc123', // ID de l'organization
});
window.location.href = `https://YOUR_DOMAIN.auth0.com/authorize?${params}`;
Dans cet exemple, l'utilisateur est authentifié uniquement dans le contexte de son organization.
Vous pouvez aussi inviter l’utilisateur ou lui laisser choisir son organization.
// Ou laisser Auth0 demander l'organization
const params = new URLSearchParams({
...
prompt: 'login',
invitation: 'INVITATION_TICKET', // si l'utilisateur est invité
});
---
Auth0 enrichit automatiquement le token utilisateur avec l'identifiant de l'organisation et peut y ajouter les rôles.
Récupérer l'organization dans le token
Auth0 ajoute automatiquement le claim org_id dans l'access token :
{
"sub": "auth0|...",
"org_id": "org_abc123",
"https://myapp.com/roles": ["admin"]
}
Grâce aux actions Auth0, on peut enrichir le token avec les rôles ou informations personnalisés de l'organisation.
// Action Post Login : enrichir le token avec les rôles de l'organization
exports.onExecutePostLogin = async (event, api) => {
if (event.organization) {
const roles = event.authorization?.roles || [];
api.accessToken.setCustomClaim('https://myapp.com/org_roles', roles);
api.accessToken.setCustomClaim('https://myapp.com/org_name', event.organization.name);
}
};
Ce code ajoute dynamiquement au token d'accès les rôles et le nom de l'organisation pour chaque utilisateur connecté.
---
Avant de choisir une stratégie multi-tenant, il est important de comprendre les limites de chaque plan Auth0 avec Organizations.
Limites d'Auth0 Organizations
| Limite | Plan Developer | Plan Enterprise | |--------|---------------|-----------------| | Organizations max | 5 | Illimitées | | Membres par org | 10 | Illimités | | Connexions par org | 1 | Multiples | | Invitations | Oui | Oui | | Branding custom | Oui | Oui |
---
Voici un résumé des différences entre utiliser Organizations et un tenant séparé par client.
Alternative : un tenant par client
Pour les clients avec des exigences de séparation totale des données :
| Critère | Organizations | Tenant par client | |---------|---------------|-------------------| | Isolation données | Logique | Physique totale | | Coût | Faible | Élevé | | Opérations | Centralisées | Complexe | | Conformité stricte | Peut suffire | Recommandé |
---
L’envoi des invitations permet de gérer facilement l’onboarding sécurisé de nouveaux membres dans chaque organization.
Gestion des invitations
Ce script API permet d’inviter un nouvel utilisateur et de lui affecter des rôles dès l’entrée dans l’organization.
# Inviter un utilisateur dans une organization
curl -X POST "https://YOUR_DOMAIN.auth0.com/api/v2/organizations/ORG_ID/invitations" -H "Authorization: Bearer $MGMT_TOKEN" -H "Content-Type: application/json" -d '{
"inviter": {"name": "Admin"},
"invitee": {"email": "[email protected]"},
"client_id": "YOUR_CLIENT_ID",
"roles": ["rol_viewer"],
"ttl_sec": 604800,
"send_invitation_email": true
}'
Cette commande déclenche automatiquement l’envoi d’une invitation sécurisée par email au nouvel utilisateur.
---
> 🏢 Vous construisez un SaaS B2B ? Nos experts conçoivent votre architecture multi-tenant Auth0 de A à Z, avec la gestion des onboarding clients automatisée.
📞 +33 1 23 45 67 89 · 📧 [email protected]
Autres articles
- Auth0 et OAuth 2.0 : architecture complète pour comprendre les flux d'autorisation
- OpenID Connect sur Auth0 : ID Token, UserInfo et discovery endpoint expliqués
- Configurer SAML 2.0 avec Auth0 : guide complet pour l'entreprise
- Migrer des Rules vers les Auth0 Actions : guide pas à pas
- Validation des JWT Auth0 : RS256 vs HS256, JWKS et pièges communs
- Concevoir son architecture de tenants Auth0 : dev, staging, prod
- Configurer un domaine personnalisé Auth0 : login.votredomaine.com étape par étape
- Auth0 SDK React : authentification complète avec auth0-react