SSO Intercom et Zendesk avec Auth0 : authentification unifiée pour le support
Permettre à vos utilisateurs de se connecter à Intercom et Zendesk avec les mêmes credentials. Identity Verification, JWT SSO et widget integration.
Par Auth0.Expert · 2025-04-15 · 9 min de lecture
SSO Intercom et Zendesk avec Auth0
TL;DR
Intercom et Zendesk supportent l'Identity Verification via un HMAC signé. Avec Auth0, vous générez ce hash côté serveur pour authentifier silencieusement vos utilisateurs dans le widget de support.
---
Intercom Identity Verification
Comment ça marche
Ce schéma présente tout le processus d'identification utilisateur avec Intercom et Auth0 : il s'agit de vérifier que l'utilisateur authentifié correspond à l'identité transmise au widget Intercom.
1. Utilisateur connecté à votre app (Auth0 token valide)
2. Votre backend génère un HMAC(user_id, secret_key)
3. Ce hash est passé à window.Intercom('boot', { user_hash: hash })
4. Intercom vérifie → accès au chat avec l'historique du contact
Backend : générer le hash HMAC
Ce code Python montre comment générer un hash HMAC à partir du user_id Auth0 pour valider l'identité côté Intercom.
import hmac
import hashlib
INTERCOM_SECRET_KEY = os.environ['INTERCOM_IDENTITY_VERIFICATION_SECRET']
def generate_intercom_hash(user_id: str) -> str:
"""Génère le hash HMAC pour Intercom Identity Verification."""
return hmac.new(
INTERCOM_SECRET_KEY.encode('utf-8'),
user_id.encode('utf-8'),
hashlib.sha256
).hexdigest()
@app.get('/api/intercom/identity')
async def get_intercom_identity(payload=Depends(get_current_user)):
user_id = payload['sub'] # Auth0 user_id
user_hash = generate_intercom_hash(user_id)
return {
'user_id': user_id,
'user_hash': user_hash,
'email': payload.get('email'),
'name': payload.get('name'),
}
Ce code retourne un objet JSON contenant l'identité de l'utilisateur et le hash sécurisé attendu par Intercom.
Frontend : initialiser Intercom
Ce script côté frontend permet d'initialiser Intercom avec les infos récupérées via Auth0, en incluant le hash d'identité sécurisé provenant de votre backend.
// Après login Auth0, initialiser Intercom avec l'identité
const { user, getAccessTokenSilently } = useAuth0();
useEffect(() => {
if (!user) return;
async function initIntercom() {
const token = await getAccessTokenSilently();
// Récupérer le hash depuis votre backend
const { user_hash } = await fetch('/api/intercom/identity', {
headers: { Authorization: `Bearer ${token}` },
}).then(r => r.json());
window.Intercom('boot', {
app_id: 'YOUR_INTERCOM_APP_ID',
user_id: user.sub,
email: user.email,
name: user.name,
user_hash: user_hash,
// Données custom
plan: user['https://yourapp.com/plan'],
company: {
id: user['https://yourapp.com/company_id'],
name: user['https://yourapp.com/company_name'],
},
});
}
initIntercom();
}, [user]);
Cette logique permet à tous les utilisateurs connectés via Auth0 d'accéder au support Intercom sans resaisir leurs infos.
---
Zendesk SSO avec Auth0
Avant toute configuration, il est important de connecter Auth0 en tant que fournisseur d'identité (IdP) à Zendesk pour activer le SSO centralisé.
1. Configurer Auth0 comme IdP Zendesk
Ajoutez et configurez l'addon Zendesk sur votre application Auth0 pour fournir à Zendesk les informations SAML nécessaires.
{
"name": "zendesk",
"options": {
"zendesk_subdomain": "yourcompany"
}
}
URL SSO Zendesk : https://YOUR_DOMAIN.auth0.com/samlp/APPLICATION_CLIENT_ID
2. Configurer Zendesk
Dans l’interface Zendesk, indiquez les URLs de redirection et certificats pour permettre l'authentification via Auth0.
Remote Login URL: https://YOUR_DOMAIN.auth0.com/samlp/CLIENT_ID
Certificate Fingerprint: [de la config Auth0]
Remote Logout URL: https://YOUR_DOMAIN.auth0.com/samlp/CLIENT_ID/logout
3. JWT SSO (alternative SAML)
Ce code backend Node.js montre comment générer un JWT pour permettre à vos utilisateurs de se connecter à Zendesk depuis votre application Auth0.
// Backend : générer un JWT Zendesk
const jwt = require('jsonwebtoken');
function generateZendeskToken(user) {
const payload = {
jti: crypto.randomUUID(),
iat: Math.floor(Date.now() / 1000),
name: user.name,
email: user.email,
external_id: user.sub, // Auth0 user_id
organization: user.company_name,
tags: user.plan ? [user.plan] : [],
role: user.role === 'admin' ? 'agent' : 'end-user',
};
return jwt.sign(payload, process.env.ZENDESK_SHARED_SECRET);
}
@app.get('/api/zendesk/sso')
async def zendesk_sso(payload=Depends(get_current_user)):
token = generateZendeskToken(payload)
subdomain = 'yourcompany'
return_to = request.query_params.get('return_to', f'https://{subdomain}.zendesk.com')
# Rediriger vers Zendesk avec le token
redirect_url = f'https://{subdomain}.zendesk.com/access/jwt?jwt={token}&return_to={return_to}'
return RedirectResponse(redirect_url)
En résumé, le backend génère un JWT court et redirige vers Zendesk pour connecter automatiquement l'utilisateur via SSO.
4. Bouton SSO dans votre app
Voici comment proposer un bouton support qui déclenchera l'authentification SSO avec Zendesk pour vos utilisateurs Auth0.
function SupportButton() {
const { getAccessTokenSilently } = useAuth0();
const openZendesk = async () => {
const token = await getAccessTokenSilently();
// Votre backend redirige vers Zendesk SSO
window.open(`/api/zendesk/sso?token=${token}`, '_blank');
};
return (
<button onClick={openZendesk}>
💬 Contacter le support
</button>
);
}
Ce bouton permet d'offrir une expérience utilisateur cohérente et sécurisée pour accéder au support Zendesk sans friction.
---
Synchroniser les données utilisateur
Grâce à ce script d’Action Post Login Auth0, vous pouvez synchroniser les données utilisateur (plan, email, date de connexion) vers Intercom ou Zendesk après chaque login.
// Action Post Login : enrichir Intercom et Zendesk avec le plan
exports.onExecutePostLogin = async (event, api) => {
const plan = event.user.app_metadata?.plan || 'free';
const api_url = event.secrets.BACKEND_URL;
// Mettre à jour Intercom via votre backend (fire & forget)
fetch(`${api_url}/api/intercom/update-contact`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
auth0_id: event.user.user_id,
email: event.user.email,
plan: plan,
last_login: new Date().toISOString(),
}),
}).catch(() => {}); // Non-bloquant
};
Cette logique garantit que les informations de support sont toujours à jour côté Intercom/Zendesk, sans perturber la connexion utilisateur.
---
> 💬 Intégration support unifiée : nous configurons votre SSO Intercom/Zendesk avec Auth0 pour une expérience utilisateur seamless entre votre app et le support.
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
- Architecture multi-tenant avec Auth0 : organisations, isolation et bonnes pratiques
- 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