- 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.
Rediriger à partir de Start 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 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.redirectsera ignoré afin de permettre à l’authentification de se poursuivre. - toute modification apportée à l’objet
userest 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
context.protocol :
Exemple pour forcer un changement de mot de passe
- 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 changé et doit être validé par l’application.
- 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
- Une fois que l’utilisateur a changé son mot de passe avec succès, l’application extrait la claim
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 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
Renvoyer de l’information à la Rule
/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
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
Point de terminaison Resource Owner
/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
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
/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.