prompt=login peut être contourné en supprimant simplement le paramètre lors de son passage par l’agent utilisateur (navigateur) et ne sert essentiellement qu’à fournir une indication d’expérience utilisateur au fournisseur (OP) lorsque la (RP) veut afficher un lien comme :
« Bonjour Josh. Ce n’est pas vous ? Cliquez ici. »
Cependant, vous ne devriez pas vous y fier pour valider qu’une authentification récente a bien eu lieu. Pour atténuer ce risque, le client doit valider que la réauthentification a bien eu lieu à l’aide du claim auth_time. Ce claim sera automatiquement inclus dans le 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 d’implémenter la réauthentification dépend de votre cas d’utilisation. Il importe de distinguer une simple réauthentification pour les opérations sensibles de la montée en assurance (c.-à-d. l’) pour les opérations sensibles. Les deux sont des mesures de sécurité valides. La première exige que l’utilisateur final saisisse de nouveau son mot de passe, tandis que la seconde exige aussi qu’il utilise un moyen d’authentification multifacteur préconfiguré.
Limites du paramètre prompt=login
prompt=login, qui peut être utilisé pour déclencher l’interface de réauthentification (généralement un écran de connexion) :
promptFACULTATIF : liste de valeurs de type chaîne ASCII, sensibles à la casse et délimitées par des espaces, qui indique si le serveur d’autorisation demande à l’utilisateur final de se réauthentifier et de donner son consentement. Les valeurs définies sont :loginLe serveur d’autorisation doit demander à l’utilisateur final de 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 peut pas faire la différence entre les champs contenus dans le jeton d’identité.
Voici un diagramme d’un flux implicite simplifié utilisant le paramètre prompt=login :

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

prompt=login a 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 : ancienneté maximale de l’authentification. Spécifie le délai maximal autorisé, en secondes, depuis la dernière fois que l’utilisateur final a été authentifié activement 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 OpenID 2.0 PAPE max_auth_age.) Lorsque max_age est utilisé, le jeton d’identité renvoyé doit inclure une claim auth_time.max_age est demandé par le RP, une claim auth_time doit être présente dans le RP. Cela signifie que max_age peut être utilisé de l’une des deux façons suivantes :
- Pour imposer une ancienneté maximale de session : Si une application exige que les utilisateurs se réauthentifient une fois par jour, cela peut être imposé même dans le contexte d’une session beaucoup plus longue, en attribuant une valeur à
max_age. Ces valeurs sont définies en secondes. - Pour forcer une réauthentification immédiate : Si une application exige qu’un utilisateur se réauthentifie avant d’obtenir l’accès, fournissez une valeur de 0 pour le paramètre
max_ageet l’AS forcera une nouvelle connexion.

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 de manipulation côté client qui pourrait contourner le paramètre prompt=login.
Utiliser les claims auth_time
max_age comme moyen de confirmer avec certitude qu’une ré-authentification a eu lieu, alors que prompt=login ne le permet pas. Cela n’offre pas d’options très sécuritaires si vous souhaitez forcer une ré-authentification :
- prompt=login : inclure seulement le paramètre
promptet ne pas valider que l’AS a réellement ré-authentifié l’utilisateur. - prompt=login & max_age=999999 : inclure un
max_agearbitraire pour qu’un claimauth_timesoit présent. Vous pouvez valider qu’une ré-authentification a eu lieu, mais les paramètres deviennent compliqués. - max_age=0 : force effectivement un écran de connexion en utilisant seulement le paramètre
max_age. Notez qu’une mise à jour récente de la spécification a clarifié davantage ce paramètre, en indiquant qu’il est effectivement équivalent àprompt=login. Cette option n’est pas viable, puisqu’elle mélange ce qui devrait être un paramètre d’UX 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. Cela signifie que vous pouvez utiliser prompt=login ET valider qu’une ré-authentification a bien eu lieu.
Exemple de validation de auth_time
Vous devez mettre en place une validation pour vous assurer qu’une réauthentification a bien eu lieu. Vous devez valider qu’une valeur
auth_time appropriée a été renvoyée.max_age=0 à Auth0OidcStrategy :
JavaScript
max_age :
JavaScript
prompt=login dans le même contexte, mais comme la norme n’exige pas qu’un auth_time accompagne la réponse du jeton d’identité, vous devez effectuer la validation manuellement. Le constructeur de la stratégie serait donc :
JavaScript
max_age=0, le client 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 forçage de la réauthentification auprès du fournisseur d’identité en amont, car tous les fournisseurs ne le permettent pas.
Le schéma 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.