- Faire accepter de façon personnalisée la politique de confidentialité, les conditions d’utilisation et les formulaires de divulgation des données.
- Recueillir de façon sécurisée, une seule fois, des données de profil supplémentaires requises.
- Permettre aux utilisateurs distants d’Active Directory de modifier leur mot de passe.
- Exiger des utilisateurs qu’ils fournissent une vérification supplémentaire lorsqu’ils se connectent à partir d’emplacements inconnus.
- Recueillir davantage de renseignements sur vos utilisateurs que ceux qu’ils ont fournis lors de leur inscription initiale.
Lancer la redirection et reprendre l’authentification
context.redirect comme suit :
context.redirect.url. Auth0 transmet également un paramètre state dans cette URL. Par exemple :
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 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 transmise à l’URL de redirection. Par exemple, si votre Rule a redirigé vers https://example.com/foo, Auth0 utiliserait une URL de redirection semblable à https://example.com/foo?state=abc123. Ainsi, abc123 correspondrait à 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; toutefois,
context.redirectsera ignoré afin de permettre à l’authentification de se poursuivre. - toute modification apportée à l’objet user est effectuée pendant la redirection, avant l’appel au point de terminaison
/continue. Par exemple, les mises à jour effectuées au moyen de l’Auth0 sont disponibles une fois la transaction reprise.
Valider une reprise de connexion
context.protocol :
Exemple de changement de mot de passe forcé
- L’utilisateur tente de se connecter et doit changer son mot de passe.
- 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 modifié et doit être validé par l’application.
- L’utilisateur change son mot de passe sur la page propre à l’application, qui appelle la Auth0 Management API
- Une fois que l’utilisateur a changé son mot de passe avec succès, l’application extrait la revendication
authorize_againdu 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
Considérations de sécurité
UnauthorizedError).
Toutefois, si vous devez communiquer directement avec Auth0 et lui transmettre des instructions pour restreindre l’accès (par exemple, si vous implémentez des vérifications de 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é respectées. De même, si vous devez transmettre de l’information à l’application vers laquelle vous redirigez l’utilisateur, vous devez disposer d’un moyen sécurisé de vous assurer que l’information transférée n’a pas été altérée.
Assurez-vous que l’application se connecte avec le même utilisateur
Transmettre des informations à la Rule
/continue. Vous ne devriez renvoyer des informations à la Rule que si la Rule elle-même doit recevoir des informations et que celles-ci ne sont pertinentes que pour cette session de connexion précise.
Lors de la transmission d’informations 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é dans
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 transmettez pas d’informations au point de terminaison /continue, vous pourriez vouloir ajouter le JTI à une liste d’exclusion, à moins que vos délais d’expiration soient suffisamment courts pour que les attaques par rejeu soient presque impossibles.
Restrictions et limites
- le point de terminaison Resource Owner
- l’échange par mot de passe
- l’échange de Jeton d’actualisation
context.protocol :
- Pour l’échange par mot de passe :
context.protocol === 'oauth2-password' - Pour l’échange de :
context.protocol === 'oauth2-refresh-token' - Pour les connexions :
context.protocol === 'oauth2-resource-owner'
Délai d’expiration de la session
Point de terminaison Resource Owner
/oauth/token pour le Resource Owner Password Grant. Comme l’utilisateur ne se trouve pas dans un flux de redirection au départ, vous ne pouvez pas le rediriger dans une Rule. Si vous tentez de définir context.redirect, la tentative de connexion échouera avec l’erreur interaction_required.
Flux où prompt=none
prompt=none vise à éviter toute situation où l’utilisateur devrait saisir une information, 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 Rule de redirection 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 tout en contournant la Rule de redirection avec prompt=none, car après une tentative échouée, un utilisateur peut simplement relancer l’appel avec prompt=none et obtenir des jetons, puisque sa session d’authentification a été créée même si les Rules ont échoué la première fois.
Jetons d’actualisation
/oauth/token, cela échouera aussi 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é respectées. Il n’existe pas d’identifiant de session stable dans le contexte qui permettrait de recueillir des renseignements associés à la session, par exemple si cet utilisateur a réussi des défis MFA. Par conséquent, vous ne pouvez pas utiliser prompt=none.
Chaque fois que context.redirect est défini dans une Rule, si prompt=none a été transmis, l’autorisation échoue avec error=interaction_required. Cependant, puisque la session de l’utilisateur est créée même si les Rules échouent, nous ne pouvons pas avoir la certitude qu’un utilisateur a réussi tous les défis context.redirect et, par conséquent, nous ne pouvons pas utiliser prompt=none pour 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 réussi les défis si ceux-ci sont requis pour générer un jeton d’actualisation.