Skip to main content
La date de fin de vie (EOL) de Rules et Hooks sera le 18 novembre 2026, et ils ne sont plus offerts aux nouveaux tenants créés à compter du 16 octobre 2023. Les tenants existants ayant des Hooks actifs conserveront l’accès au produit Hooks jusqu’à sa fin de vie.Nous vous recommandons fortement d’utiliser Actions pour étendre Auth0. Avec Actions, vous avez accès à des informations de typage détaillées, à une documentation intégrée et à des packages npm publics, et vous pouvez connecter des intégrations externes qui enrichissent votre expérience globale d’extensibilité. Pour en savoir plus sur ce qu’offrent les Actions, consultez Comprendre le fonctionnement d’Auth0 Actions.Pour vous aider dans votre migration, nous proposons des guides qui vous aideront à passer de Rules à Actions et à passer de Hooks à Actions. Nous avons aussi une page dédiée, Move to Actions, qui présente des comparaisons de fonctionnalités, une démo d’Actions et d’autres ressources pour vous accompagner dans cette transition.Pour en savoir plus sur la dépréciation de Rules et Hooks, consultez notre article de blogue : Preparing for Rules and Hooks End of Life.
Vous pouvez utiliser les Auth0 Rules pour rediriger les utilisateurs avant qu’une transaction d’authentification soit terminée. Cela vous permet de mettre en place des flux d’authentification personnalisés qui nécessitent une interaction supplémentaire de l’utilisateur au-delà du formulaire de connexion standard. Les règles de redirection sont couramment utilisées pour effectuer une (MFA) dans Auth0, mais elles peuvent aussi servir à :
  • Des formulaires personnalisés d’acceptation de la politique de confidentialité, des conditions d’utilisation et de divulgation des données.
  • Recueillir de manière sécurisée, une seule fois, des données de profil supplémentaires requises.
  • Permettre aux utilisateurs d’Active Directory à distance de changer leur mot de passe.
  • Exiger des utilisateurs qu’ils fournissent une vérification supplémentaire lorsqu’ils se connectent depuis des lieux inconnus.
  • Recueillir plus d’informations sur vos utilisateurs que celles fournies lors de l’inscription initiale.
Vous pouvez rediriger un utilisateur une seule fois par flux d’authentification. Si vous avez une règle qui redirige un utilisateur, vous ne pouvez pas invoquer une deuxième règle pour rediriger l’utilisateur plus tard. Pour en savoir plus, consultez Authentification multifacteur dans Auth0.

Rediriger à partir de Start et reprendre l’authentification

Définissez la propriété context.redirect comme suit :
Une fois l’exécution de toutes les Rules terminée, Auth0 redirige l’utilisateur vers l’URL indiquée dans la propriété context.redirect.url. Auth0 transmet également un paramètre state dans cette URL. Par exemple :
Votre URL de redirection doit extraire le paramètre state et le renvoyer à Auth0 pour reprendre la transaction d’authentification. Le paramètre state est une valeur opaque utilisée pour prévenir les attaques de falsification de requête intersites (CSRF). Après la redirection, reprenez l’authentification en redirigeant l’utilisateur vers le point de terminaison /continue et en incluant dans l’URL le paramètre state que vous avez reçu. Si vous ne renvoyez pas le paramètre state d’origine au point de terminaison /continue, Auth0 perdra le contexte de la transaction de connexion et l’utilisateur ne pourra pas se connecter en raison d’une erreur invalid_request. Par exemple : Si vous utilisez un  :
THE_ORIGINAL_STATE est la valeur qu’Auth0 a générée et envoyée à l’URL de redirection. Par exemple, si votre Rule redirigeait vers https://example.com/foo, Auth0 utiliserait une URL de redirection comme https://example.com/foo?state=abc123. Ainsi, abc123 serait la valeur de THE_ORIGINAL_STATE. Pour reprendre la transaction d’authentification, vous redirigeriez vers : Lorsqu’un utilisateur a été redirigé vers le point de terminaison /continue :
  • toutes les Rules seront exécutées à nouveau, mais context.redirect sera ignoré afin de permettre à l’authentification de se poursuivre.
  • toute modification apportée à l’objet user est effectuée pendant la redirection, avant la requête au point de terminaison /continue. Par exemple, les mises à jour effectuées au moyen de l’Auth0 sont accessibles après la reprise de la transaction.

Valider une connexion reprise

Pour distinguer les connexions initiées par l’utilisateur des flux de connexion repris, vérifiez la propriété context.protocol :

Exemple pour forcer un changement de mot de passe

Dans certains cas, vous pourriez vouloir forcer les utilisateurs à changer leur mot de passe dans des conditions précises. Vous pouvez écrire une Rule qui se comporte comme suit :
  1. L’utilisateur tente de se connecter et doit changer son mot de passe.
  2. L’utilisateur est redirigé vers une page propre à l’application avec un JWT dans la chaîne de requête. Ce JWT garantit que seul le mot de passe de cet utilisateur peut être changé et doit être validé par l’application.
  3. L’utilisateur change son mot de passe sur la page propre à l’application, en demandant à l’application d’envoyer une requête à l’Auth0 Management API
  4. Une fois que l’utilisateur a changé son mot de passe avec succès, l’application extrait la claim authorize_again du JWT vérifié et décodé, puis redirige l’utilisateur vers cette URL pour lui permettre de se connecter avec son nouveau mot de passe.

Où stocker les données

Évitez de stocker trop de données dans le profil Auth0. Ces données sont destinées à l’authentication et à l’autorisation. Les métadonnées et les capacités de recherche d’Auth0 ne sont pas conçues pour les études de marché ni pour tout autre usage exigeant des recherches intensives ou des mises à jour fréquentes. Votre système risque de rencontrer des problèmes d’évolutivité et de performance si vous utilisez Auth0 à cette fin. Il vaut mieux stocker les données dans un système externe et conserver une référence (le user ID) dans Auth0, afin que les systèmes backend puissent récupérer les données au besoin. Une règle simple consiste à ne stocker que les éléments que vous comptez utiliser dans les rules pour les ajouter aux jetons ou prendre des décisions.

Considérations de sécurité

Le fait de faire transiter de l’information dans les deux sens par le front channel élargit la surface d’attaque dont peuvent tirer parti des . Vous ne devriez le faire que lorsque vous devez absolument exécuter une action dans la rule (par exemple, rejeter la tentative d’autorisation avec UnauthorizedError). Toutefois, si vous devez communiquer directement avec Auth0 et lui transmettre des instructions pour restreindre l’accès (par exemple, si vous mettez en œuvre des vérifications CAPTCHA ou une MFA personnalisée), vous devez disposer d’un moyen sécurisé d’indiquer à Auth0 que les exigences de cette opération ont bien été remplies. De même, si vous devez transmettre de l’information à l’application vers laquelle vous redirigez l’utilisateur, vous devez avoir un moyen sécurisé de vous assurer que l’information transférée n’a pas été altérée.

S’assurer que l’application ouvre une session pour le même utilisateur

L’application redirigera l’utilisateur vers le tenant Auth0; toutes les données liées à l’utilisateur pourront donc être récupérées au moyen du renvoyé à l’application. Cependant, vous voudrez peut-être vous assurer que l’application ouvre bien une session pour le même utilisateur que celui qui est redirigé, afin d’éviter toute altération en cours de route. Il sera donc probablement préférable d’envoyer un jeton avec la requête. Le jeton envoyé à l’application doit respecter les exigences suivantes :
Ce jeton ne doit pas être traité comme un jeton Bearer! Il s’agit d’une information signée destinée à être utilisée dans l’application. L’application doit quand même rediriger vers Auth0 pour authentifier l’utilisateur.

Renvoyer de l’information à la Rule

Dans la plupart des cas, même si vous voulez transmettre de l’information de la Rule à l’application, l’application pourra généralement la stocker de façon sécuritaire à l’endroit approprié. Même si l’objectif est de mettre à jour les métadonnées de l’application ou de l’utilisateur dans Auth0, cela peut se faire à l’aide de la Management API, et les renseignements sur l’utilisateur seront mis à jour tant que l’opération est terminée avant de rediriger l’utilisateur vers le point de terminaison /continue. Vous ne devriez renvoyer de l’information à la Rule que si la Rule elle-même doit la recevoir et que cette information n’est pertinente que pour cette session de connexion précise. Lorsque vous renvoyez de l’information au point de terminaison /continue, le jeton transmis doit respecter les exigences suivantes : Il doit être envoyé au moyen de POST, puis récupéré à context.request.body.token (ou quelque chose de semblable), plutôt que d’être transmis comme paramètre de requête. Cela ressemble à la méthode form-post pour l’authentification. Si vous ne renvoyez pas d’information au point de terminaison /continue, vous voudrez peut-être ajouter le JTI à la liste de rejet, à moins que vos délais d’expiration soient assez courts pour que les attaques par rejeu soient presque impossibles.

Restrictions et limitations

Les Redirect Rules ne fonctionnent pas avec : Vous pouvez repérer les cas ci-dessus en vérifiant context.protocol :
  • Pour l’échange de mot de passe : context.protocol === 'oauth2-password'
  • Pour l’échange de  : context.protocol === 'oauth2-refresh-token'
  • Pour les connexions avec  : context.protocol === 'oauth2-resource-owner'

Délai d’expiration de la session

Les sessions de règle de redirection sont normalement valides pendant 3 jours, sauf si vous avez configuré un délai d’expiration plus court dans vos paramètres de gestion de la session de connexion. Vous trouverez ces paramètres dans les paramètres avancés de votre tenant.

Point de terminaison Resource Owner

Il est impossible d’utiliser des règles de redirection lorsque vous appelez directement /oauth/token pour le Resource Owner Password Grant. Comme l’utilisateur ne se trouve pas au départ dans un flux de redirection, vous ne pouvez pas le rediriger dans une Rule. Si vous tentez de définir context.redirect, vous obtiendrez une tentative de connexion échouée avec l’erreur interaction_required.

Flux où prompt=none

Puisque l’objectif de prompt=none est d’éviter toute situation où l’utilisateur devrait fournir une entrée, toute redirection entraînera un error=interaction_required. Comme les Rules s’exécutent après la création d’une session d’authentification, vous ne pouvez pas utiliser prompt=none si vous avez une redirect rule qui tente de bloquer l’accès aux jetons dans certaines conditions (MFA personnalisée, CAPTCHA à la connexion, etc.). Vous ne pouvez pas créer un flux de redirection qui bloque l’accès aux jetons et contourne la redirect rule avec prompt=none, car après une tentative échouée, un utilisateur peut simplement envoyer une nouvelle requête avec prompt=none et obtenir des jetons, puisque sa session d’authentification a déjà été créée, même si les Rules ont échoué la première fois.

Jetons d’actualisation

Comme l’utilisation d’un jeton d’actualisation exige une requête en arrière-plan vers /oauth/token, cela échouera également si vous définissez context.redirect. Il est difficile de vérifier de façon sécuritaire que toutes les restrictions de connexion ont bien été appliquées. Il n’y a pas d’ID de session cohérent dans le context qui pourrait servir à recueillir de l’information associée à la session, par exemple pour savoir si cet utilisateur a réussi les étapes de vérification MFA. Par conséquent, vous ne pouvez pas utiliser prompt=none du tout. Chaque fois que context.redirect est défini dans une Rule, si prompt=none a été transmis, l’autorisation échoue avec error=interaction_required. Toutefois, comme la session de l’utilisateur est créée même si les Rules échouent, nous ne pouvons pas tenir pour acquis qu’un utilisateur a franchi toutes les étapes de vérification context.redirect et, par conséquent, nous ne pouvons pas utiliser prompt=none comme moyen d’obtenir des jetons. Dans ce cas précis, nous vous recommandons d’utiliser exclusivement des jetons d’actualisation, car vous pouvez vous assurer qu’un utilisateur a franchi les étapes de vérification si celles-ci sont requises pour générer un jeton d’actualisation.

En savoir plus