prompt=login peut être contourné en supprimant simplement le paramètre pendant son passage par l’agent utilisateur (navigateur) et ne sert qu’à fournir une indication d’expérience utilisateur au fournisseur (OP) dans les cas où la (RP) veut afficher un lien comme :
« Salut Josh. Ce n’est pas vous ? Cliquez ici. »
Toutefois, vous ne devez pas vous y fier pour valider qu’une authentification récente a bien eu lieu. Pour atténuer ce risque, l’application doit valider qu’une réauthentification a eu lieu à l’aide de la revendication auth_time. Cette revendication est automatiquement incluse dans l’ lorsque les paramètres prompt=login ou max_age=0 sont fournis dans la requête d’authentification.
Vous devez transmettre le paramètre max_age au point de terminaison /authorize de l’API Authorization. Si vous utilisez Auth0.js ou Lock, vous pouvez définir ce paramètre dans les options appropriées de la bibliothèque.
La façon dont vous implémentez la réauthentification dépend de votre cas d’utilisation précis. Faites la distinction entre une simple réauthentification pour des opérations sensibles et l’authentification renforcée (c.-à-d. l’) pour des opérations sensibles. Les deux sont des mesures de sécurité valides. La première oblige l’utilisateur final à saisir de nouveau son mot de passe, tandis que la seconde exige aussi l’utilisation d’un moyen d’authentification multifacteur préconfiguré.
Limites des paramètres prompt=login
prompt=login, qui peut être utilisé pour déclencher une interface de réauthentification (généralement un écran de connexion) :
promptFACULTATIF : liste de valeurs de chaîne ASCII sensibles à la casse, séparées par des espaces, qui précise si le serveur d’autorisation invite l’utilisateur final à se réauthentifier et à donner son consentement. Les valeurs définies sont :loginLe serveur d’autorisation doit inviter l’utilisateur final à se réauthentifier. S’il ne peut pas réauthentifier l’utilisateur final, il doit renvoyer une erreur, généralement
login_required.JSON
prompt=login, et le RP ne voit aucune différence dans les champs contenus dans le jeton d’identité.
Voici un schéma d’un flux implicite simplifié utilisant le paramètre prompt=login :

prompt=login pour pouvoir ignorer l’étape de réauthentification :

prompt=login ait réellement entraîné une réauthentification.
Paramètre de requête d’authentification max_age
prompt=login, le paramètre de requête d’authentification max_age fournit un mécanisme permettant aux RP de confirmer avec certitude qu’une réauthentification a eu lieu dans un intervalle donné. La spécification OIDC indique :
max_ageFACULTATIF : âge maximal de l’authentification. Spécifie le délai maximal autorisé, en secondes, depuis la dernière authentification active de l’utilisateur final par l’OP. Si le temps écoulé dépasse cette valeur, l’OP doit tenter de réauthentifier activement l’utilisateur final. (Le paramètre de requête
max_age correspond au paramètre de requête PAPE max_auth_age d’OpenID 2.0.) Lorsque max_age est utilisé, le jeton d’identité renvoyé doit inclure une revendication auth_time.max_age est demandé par le RP, une revendication auth_time doit être transmise au RP. Cela signifie que max_age peut être utilisé de l’une des deux façons suivantes :
- Pour imposer une fraîcheur minimale de session : si une application exige que les utilisateurs se réauthentifient une fois par jour, cela peut être imposé dans le contexte d’une session beaucoup plus longue en fournissant une valeur à
max_age. Cette valeur est exprimée en secondes. - Pour forcer une réauthentification immédiate : si une application exige qu’un utilisateur se réauthentifie avant de lui accorder l’accès, fournissez une valeur de 0 pour le paramètre
max_ageet l’AS forcera une nouvelle authentification.

auth_time dans le jeton d’identité pour déterminer si le paramètre max_age qu’il a demandé a bien été respecté. De cette façon, le paramètre max_age=0 est à l’abri du même type d’altération côté client qui pourrait compromettre le paramètre prompt=login.
Utiliser les revendications auth_time
max_age comme moyen de confirmer avec certitude qu’une réauthentification a eu lieu, contrairement à prompt=login. Si vous souhaitez forcer une réauthentification, cela n’offre donc pas d’options très sécurisées :
- prompt=login: Inclure uniquement le paramètre
prompt, sans valider que l’AS a effectivement réauthentifié l’utilisateur. - prompt=login & max_age=999999: Inclure une valeur
max_agearbitraire afin qu’une revendicationauth_timesoit présente. Vous pouvez valider qu’une réauthentification a bien eu lieu, mais les paramètres deviennent complexes. - max_age=0: Force en pratique l’affichage d’une invite de connexion en utilisant uniquement le paramètre
max_age. Notez qu’une mise à jour récente de la spécification a précisé davantage ce paramètre, en indiquant qu’il est en pratique équivalent àprompt=login. Cette option n’est pas vraiment viable, puisqu’elle mélange ce qui devrait être un paramètre d’expérience utilisateur avec un paramètre de maintien de session.
auth_time dans le jeton d’identité en réponse à un paramètre de requête prompt=login. Vous pouvez donc utiliser prompt=login ET valider qu’une réauthentification a bien eu lieu.
Exemple de validation de auth_time
Vous devez vous assurer de mettre en place une validation pour confirmer qu’une réauthentification a bien eu lieu. Vous devez vérifier qu’une valeur
auth_time valide a été renvoyée.max_age=0 à Auth0OidcStrategy :
JavaScript
max_age :
JavaScript
prompt=login dans le même contexte, mais puisque la norme n’exige pas qu’un auth_time accompagne la réponse du jeton d’identité, vous devez valider celui-ci manuellement. Le constructeur de stratégie serait donc :
JavaScript
max_age=0, l’application doit valider manuellement le paramètre auth_time. Pour en savoir plus, consultez Utiliser les claims auth_time.
Problèmes connus
auth_time.
Auth0 ne prend pas en charge le fait de forcer la réauthentification auprès du fournisseur d’identité en amont, car ce n’est pas pris en charge par tous les fournisseurs.
Le diagramme ci-dessous présente un exemple de flux pour un utilisateur qui choisit de se réauthentifier avec une connexion fédérée :

prompt=login ou de prompt=consent permet généralement d’indiquer à un fournisseur d’identité externe (social) de réauthentifier un utilisateur, mais Auth0 ne peut pas l’imposer.