prompt=login puede eludirse simplemente quitando el parámetro mientras pasa por el agente de usuario (navegador), y solo sirve para proporcionar una indicación de UX al proveedor (OP) de en los casos en que la (RP) quiera mostrar un enlace como:
“Hola, Josh. ¿No eres tú? Haz clic aquí.”
Sin embargo, no debe confiar en él para validar que se haya realizado una autenticación reciente. Para mitigar esto, el cliente debe validar que la reautenticación se haya realizado mediante la claim auth_time. Esta claim se incluirá automáticamente en el cuando se proporcionen los parámetros prompt=login o max_age=0 en la solicitud de autenticación.
Debe pasar el parámetro max_age al endpoint /authorize de la API de autorización. Si usa Auth0.js o Lock, puede establecer el parámetro en las opciones correspondientes de la biblioteca.
La forma de implementar la reautenticación depende de su caso de uso concreto. Distinga entre la reautenticación simple para operaciones sensibles y la autenticación reforzada (es decir, la ) para operaciones sensibles. Ambas son medidas de seguridad válidas. La primera requiere que el usuario final vuelva a introducir su contraseña, mientras que la segunda también exige usar un método de autenticación multifactor preconfigurado.
Limitaciones de los parámetros prompt=login
prompt=login, que puede usarse para mostrar la interfaz de reautenticación (normalmente, una pantalla de inicio de sesión):
promptOPCIONAL: Lista de valores de cadena ASCII separados por espacios y con distinción entre mayúsculas y minúsculas, que especifica si el servidor de autorización solicita al usuario final que vuelva a autenticarse y otorgue su consentimiento. Los valores definidos son:loginEl servidor de autorización debe solicitar al usuario final que vuelva a autenticarse. Si no puede volver a autenticar al usuario final, debe devolver un error, normalmente
login_required.JSON
prompt=login, y el RP no puede distinguirlo por los campos incluidos en el token de ID.
Aquí se muestra un diagrama de un flujo implícito simplificado que usa el parámetro prompt=login:

prompt=login, y el paso de reautenticación puede omitirse:

prompt=login realmente haya dado lugar a una reautenticación.
parámetro de solicitud de autenticación max_age
prompt=login, el parámetro de solicitud de autenticación max_age proporciona un mecanismo mediante el cual los RP pueden confirmar de forma fehaciente que la reautenticación se ha producido dentro de un intervalo de tiempo determinado. La especificación de OIDC establece lo siguiente:
max_ageOPCIONAL: Antigüedad máxima de autenticación. Especifica el tiempo transcurrido permitido, en segundos, desde la última vez que el usuario final fue autenticado activamente por el OP. Si el tiempo transcurrido es mayor que este valor, el OP debe intentar reautenticar activamente al usuario final. (El parámetro de solicitud
max_age se corresponde con el parámetro de solicitud max_auth_age de OpenID 2.0 PAPE). Cuando se usa max_age, el token de ID devuelto debe incluir un valor de claim auth_time.max_age, debe estar presente una claim auth_time para el RP. Esto significa que max_age puede usarse de una de estas dos formas:
- Para exigir una vigencia mínima de la sesión: Si una aplicación requiere que los usuarios vuelvan a autenticarse una vez al día, esto puede aplicarse en el contexto de una sesión de mucho más larga proporcionando un valor para
max_age. Estos valores se definen en segundos. - Para forzar una reautenticación inmediata: Si una aplicación requiere que un usuario vuelva a autenticarse antes de obtener acceso, proporcione un valor de 0 para el parámetro
max_agey el AS forzará un nuevo inicio de sesión.

auth_time en el token de ID para determinar si se cumplió o no el parámetro max_age que solicitó. De esta forma, el parámetro max_age=0 es inmune al mismo tipo de manipulación del cliente que podría comprometer el parámetro prompt=login.
Usar claims auth_time
max_age como una forma de confirmar de manera inequívoca que se ha producido una reautenticación, pero prompt=login no. Esto no ofrece opciones muy seguras si quiere forzar una reautenticación:
- prompt=login: Incluya solo el parámetro
prompty no valide que el AS realmente haya vuelto a autenticar. - prompt=login & max_age=999999: Incluya un
max_agearbitrario para que esté presente un claimauth_time. Puede validar que se produjo una reautenticación, pero los parámetros se vuelven engorrosos. - max_age=0: Fuerza de forma efectiva una pantalla de inicio de sesión usando solo el parámetro
max_age. Tenga en cuenta que una actualización reciente de la especificación aclaró aún más este parámetro e indicó que, en la práctica, es lo mismo queprompt=login. Esta opción no es viable, ya que mezcla lo que debería ser un parámetro de UX con un parámetro de mantenimiento de sesión.
auth_time en el token de ID al responder a un parámetro de solicitud prompt=login. Esto significa que tiene la opción de usar prompt=login Y validar que se produjo una reautenticación.
Ejemplo de validación de auth_time
Debe asegurarse de implementar la validación para confirmar que se haya realizado una reautenticación. Debe validar que se haya devuelto un
auth_time válido.max_age=0 a Auth0OidcStrategy:
JavaScript
max_age:
JavaScript
prompt=login en el mismo contexto, pero, dado que el estándar no exige que un auth_time acompañe la respuesta del token de ID, debe validar esto manualmente. Por lo tanto, el constructor de la estrategia sería:
JavaScript
max_age=0, el cliente debe validar manualmente el parámetro auth_time. Para obtener más información, consulte Usar claims de auth_time.
Problemas conocidos
auth_time.
Auth0 no admite forzar la reautenticación en el proveedor de identidad upstream, ya que no todos los proveedores lo permiten.
El siguiente diagrama muestra un flujo de ejemplo para un usuario que decide volver a autenticarse con una conexión federada:

prompt=login o prompt=consent suele ser una forma de indicar a un proveedor de identidad externo (social) que vuelva a autenticar al usuario, pero Auth0 no puede exigirlo.