- Aceptación personalizada de políticas de privacidad, términos del servicio y formularios de divulgación de datos.
- Recopilar de forma segura, una sola vez, datos de perfil adicionales obligatorios.
- Permitir que los usuarios remotos de Active Directory cambien su contraseña.
- Exigir que los usuarios proporcionen una verificación adicional al iniciar sesión desde ubicaciones desconocidas.
- Recopilar más información sobre tus usuarios de la que proporcionaron durante el registro inicial.
Iniciar la redirección y reanudar la autenticación
context.redirect de la siguiente manera:
context.redirect.url. Auth0 también incluye un parámetro state en esa URL. Por ejemplo:
state y devolverlo a Auth0 para reanudar la transacción de autenticación. El estado es un valor opaco que se utiliza para evitar ataques de Cross-Site Request Forgery (CSRF).
Después de la redirección, reanude la autenticación redirigiendo al usuario al endpoint /continue e incluyendo el parámetro state que recibió en la URL. Si no envía el estado original de vuelta al endpoint /continue, Auth0 perderá el contexto de la transacción de inicio de sesión y el usuario no podrá iniciar sesión debido a un error invalid_request.
Por ejemplo:
Si usas un :
THE_ORIGINAL_STATE es el valor que Auth0 generó y envió a la URL de redirección. Por ejemplo, si tu Rule redirigía a https://example.com/foo, Auth0 usaría una URL de redirección similar a https://example.com/foo?state=abc123. Por lo tanto, abc123 sería el valor de THE_ORIGINAL_STATE. Para reanudar la transacción de autenticación, redirige a:
Cuando se haya redirigido a un usuario al endpoint /continue:
- todas las Rules se ejecutarán de nuevo; sin embargo,
context.redirectse ignorará para permitir que la autenticación continúe. - cualquier cambio en el objeto de usuario se realiza durante la redirección, antes de llamar al endpoint
/continue. Por ejemplo, las actualizaciones realizadas mediante la de Auth0 estarán disponibles después de continuar la transacción.
Validar la reanudación del inicio de sesión
context.protocol:
Ejemplo para forzar el cambio de contraseña
- El usuario intenta iniciar sesión y necesita cambiar su contraseña.
- Se redirige al usuario a una página específica de la aplicación con un JWT en la cadena de consulta. Este JWT garantiza que solo se pueda cambiar la contraseña de este usuario y debe ser validado por la aplicación.
- El usuario cambia su contraseña en la página específica de la aplicación haciendo que la aplicación llame a la Auth0 Management API
- Una vez que el usuario haya cambiado correctamente su contraseña, la aplicación extrae la reclamación
authorize_againdel JWT verificado y decodificado, y luego redirige al usuario a esa URL para que pueda iniciar sesión con su nueva contraseña.
Dónde almacenar datos
Consideraciones de seguridad
UnauthorizedError).
Sin embargo, si necesitas comunicarte directamente con Auth0 y darle instrucciones para restringir el acceso (si estás implementando comprobaciones de captcha o MFA personalizada), debes contar con un mecanismo seguro para indicar a Auth0 que se cumplieron los requisitos de esa operación. Del mismo modo, si necesitas pasar información a la aplicación a la que estás redirigiendo, debes contar con una forma segura de garantizar que la información transferida no haya sido manipulada.
Asegúrese de que la aplicación inicie sesión como el mismo usuario
Devolver información a la Rule
/continue. Solo debería devolver información a la Rule si es la propia Rule la que necesita obtenerla y si esa información solo es relevante para esta sesión de inicio de sesión en particular.
Al devolver información al endpoint /continue, el token enviado debe cumplir los siguientes requisitos:
Debe enviarse mediante POST y luego recuperarse en
context.request.body.token (o algo similar), en lugar de pasarlo como parámetro de consulta. Esto es similar al método form-post para autenticación.
Si no está devolviendo información al endpoint /continue, quizá le convenga añadir el JTI a una lista de denegación, a menos que los tiempos de expiración sean lo suficientemente cortos como para que los ataques de repetición sean casi imposibles.
Restricciones y limitaciones
context.protocol:
- Para el intercambio de contraseña:
context.protocol === 'oauth2-password' - Para el intercambio de :
context.protocol === 'oauth2-refresh-token' - Para los inicios de sesión con :
context.protocol === 'oauth2-resource-owner'
Tiempo de espera de sesión
Endpoint de Resource Owner
/oauth/token para el flujo Resource Owner Password Grant. Como el usuario no forma parte de un flujo de redirección desde el principio, no puedes redirigirlo en una Rule. Si intentas establecer context.redirect, obtendrás un intento de inicio de sesión fallido con el error interaction_required.
Flujos con prompt=none
prompt=none es evitar cualquier escenario en el que el usuario tenga que introducir información, cualquier redirección dará lugar a un error=interaction_required.
Como las Rules se ejecutan después de que se crea una sesión de autenticación, no puede usar prompt=none si tiene una Rule de redirección que intenta bloquear el acceso a los tokens en determinadas condiciones (MFA personalizada, captcha en el inicio de sesión, etc.).
No puede crear un flujo de redirección que bloquee el acceso a los tokens y omita la Rule de redirección con prompt=none porque, después de un intento fallido, un usuario puede simplemente volver a hacer la llamada con prompt=none y obtener tokens, ya que su sesión de autenticación ya se habrá creado aunque las Rules hayan fallado la primera vez.
Tokens de actualización
/oauth/token, esto también fallará si se establece context.redirect.
Es difícil verificar de forma segura que se hayan aplicado las restricciones del inicio de sesión. No hay un ID de sesión consistente en el contexto que pueda usarse para recopilar información asociada con la sesión, por ejemplo, si este usuario superó las verificaciones de MFA. Por lo tanto, no puede usar prompt=none en absoluto.
Cada vez que se establece context.redirect en una Rule, si se pasó prompt=none, la autorización falla con error=interaction_required, pero como la sesión del usuario se crea incluso si las Rules fallan, no podemos confiar en que un usuario haya superado todas las verificaciones de context.redirect y, por lo tanto, no podemos usar prompt=none como una forma de obtener tokens.
En este caso específico, le recomendamos usar exclusivamente tokens de actualización, porque así puede asegurarse de que un usuario haya superado las verificaciones si estas son necesarias para generar un token de actualización.