Migrer des Rules vers les Auth0 Actions : guide pas à pas
Auth0 abandonne les Rules et Hooks. Découvrez comment migrer votre logique métier vers les Actions, les différences clés et les pièges à éviter.
Par Auth0.Expert · 2025-02-01 · 11 min de lecture
Migrer des Rules vers les Auth0 Actions
TL;DR
Auth0 a officiellement déprécié les Rules et Hooks en faveur des Actions. La migration n'est pas automatique. Ce guide vous explique les différences, les pièges et comment migrer sans interruption.
---
Pourquoi cette migration est urgente
- Fin de support Rules : Auth0 prévoit la suppression des Rules sur les nouveaux tenants
- Performance : les Actions s'exécutent dans un runtime Node 18+ isolé (versus Node 12 pour les Rules)
- Observabilité : les Actions ont des logs d'exécution intégrés dans le dashboard
- Versioning : les Actions supportent les drafts et la mise en production contrôlée
---
Différences clés Rules vs Actions
Ce tableau récapitule les principales différences entre Rules et Actions pour bien comprendre l'intérêt de la migration.
| Aspect | Rules | Actions | |--------|-------|---------| | Runtime | Node 12 | Node 18+ | | Exécution | Séquentielle, toutes les rules | Flows avec triggers précis | | Accès contexte | context, user, callback | event, api | | Secrets | Stockés en clair (dashboard) | Variables d'environnement sécurisées | | NPM modules | Oui (liste fixe) | Oui (tous modules npm) | | Debug | Logs en temps réel | Logs en temps réel + historique |
---
Exemple de migration : ajouter des rôles au token
Voici comment le fait d'ajouter des rôles personnalisés au token diffère entre une Rule et une Action.
Avant (Rule)
Ce code ajoute la liste des rôles d’un utilisateur dans les claims du token, pour un usage applicatif.
function addRolesToToken(user, context, callback) {
const namespace = 'https://myapp.com/';
const assignedRoles = (context.authorization || {}).roles || [];
let idTokenClaims = context.idToken || {};
let accessTokenClaims = context.accessToken || {};
idTokenClaims[`${namespace}roles`] = assignedRoles;
accessTokenClaims[`${namespace}roles`] = assignedRoles;
context.idToken = idTokenClaims;
context.accessToken = accessTokenClaims;
callback(null, user, context);
}
Ce code enrichit les tokens d’Auth0 avec les rôles personnalisés.
Après (Action — Post Login)
Dans une Action, la logique est équivalente mais utilise la nouvelle API et le format event.
exports.onExecutePostLogin = async (event, api) => {
const namespace = 'https://myapp.com/';
const roles = event.authorization?.roles || [];
api.idToken.setCustomClaim(`${namespace}roles`, roles);
api.accessToken.setCustomClaim(`${namespace}roles`, roles);
};
Cette Action attache les rôles utilisateur aux tokens de façon sécurisée après la connexion.
---
Exemple : bloquer un login (geo-restriction)
Ce cas montre comment refuser la connexion d'un utilisateur selon son pays d'accès, d'abord en Rule puis en Action.
Rule (ancien)
Ici, la connexion est refusée pour tout utilisateur n’étant pas localisé en France.
function geoRestriction(user, context, callback) {
if (context.request.geoip.country_code !== 'FR') {
return callback(new UnauthorizedError('Accès refusé depuis ce pays'));
}
callback(null, user, context);
}
Cette Rule coupe l’accès aux utilisateurs en dehors de la France pendant le login.
Action
Dans une Action, la logique est similaire mais mieux intégrée au workflow Auth0 moderne.
exports.onExecutePostLogin = async (event, api) => {
const country = event.request.geoip?.country_code;
if (country && country !== 'FR') {
api.access.deny(`Accès refusé depuis ${country}`);
}
};
Ce code refuse l’authentification aux utilisateurs dont le pays est différent de “FR”.
---
Triggers disponibles dans les Actions
Voici la liste des triggers pouvant être utilisés pour personnaliser les flows d’authentification avec les Actions.
| Trigger | Moment d'exécution | |---------|-------------------| | post-login | Après authentification réussie | | pre-user-registration | Avant création d'un nouvel utilisateur | | post-user-registration | Après création (envoi email, Slack, etc.) | | send-phone-message | Personnaliser SMS MFA | | password-reset-post-challenge | Après réinitialisation | | credentials-exchange | Flux Client Credentials (M2M) |
---
Migration progressive : stratégie sans risque
Voici une méthode recommandée étape par étape pour migrer toutes vos Rules en minimisant les risques de coupure.
Semaine 1 : Inventorier toutes les Rules (script export)
Semaine 2 : Créer les Actions en parallèle (sans les activer)
Semaine 3 : Tester sur tenant de staging
Semaine 4 : Activer Actions + désactiver Rules progressivement
Script pour lister vos Rules via l'API Auth0
Ce script utilise l’API Auth0 pour récupérer la liste complète de vos Rules configurées.
curl -H "Authorization: Bearer $MGMT_TOKEN" "https://YOUR_DOMAIN.auth0.com/api/v2/rules?per_page=100&page=0"
Ce script vous permet d’identifier facilement toutes les Rules à migrer vers les Actions.
---
Accès aux modules npm dans les Actions
Les Actions vous offrent la liberté d’importer n’importe quel module npm pour enrichir vos workflows d’authentification.
const axios = require('axios'); // disponible directement
const { Resend } = require('resend'); // ou déclarez dans les dépendances Action
On peut ainsi intégrer facilement des appels externes ou implémenter des logiques avancées dans les Actions.
---
> 📌 Migration urgente ? Notre équipe a migré plus de 500 Rules vers des Actions pour des clients SaaS. On vous livre un inventaire complet + les Actions migrées et testées en 5 jours ouvrés.
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
- 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
- Auth0 SDK React : authentification complète avec auth0-react