Saltar al contenido principal
Usar Actions con sesiones te permite configurar funcionalidades de detección y respuesta a riesgos posteriores a la autenticación para proteger tus aplicaciones y usuarios frente al secuestro de sesiones. También puedes personalizar dinámicamente los límites de duración de la sesión. Para ello, las Actions posteriores al inicio de sesión incluyen dos objetos clave:
  • event.session: Proporciona información relevante, incluidos id, las fechas created_at, expires_at, idle_expires_at, updated_at, authentication_at, clients e información de device, como ASN, IP y User_agent.
  • api.session: Te permite administrar sesiones existentes revocándolas o cambiando las fechas de expiry.
Tanto los objetos event.session como api.session admiten flujos interactivos basados en web, incluido el flujo de código de autorización, el flujo implícito, el flujo de código de dispositivo, así como y . Puedes usar el objeto event.session para revisar las marcas de tiempo de las interacciones más recientes y evaluar los riesgos asociados a las transacciones actuales. También puedes combinar el objeto event.session con otros objetos de evento, como event.authentication o event.request. Después, puedes usar el objeto api.session para restablecer las fechas de vencimiento de la sesión existente o revocar la sesión. Para obtener más información sobre estos objetos, consulta:
  • Objeto Event: Obtén información sobre el objeto Event de sesión y sus propiedades.
  • Objeto API: Obtén información sobre el objeto API de sesión y sus métodos.

Revocar sesiones con Actions

El método api.session.revoke(reason, options) de post-login le permite reaccionar ante los riesgos asociados a una transacción. Este método incluye una opción que le permite conservar los vinculados a la transacción revocada. Además de revocar la sesión, el método también iniciará un iniciador de cierre de sesión de canal de retorno de OIDC session-revoked para cerrar la sesión de los usuarios en todas las aplicaciones vinculadas a la sesión actual y registrará un evento session_revoked en los registros del inquilino. Puede usar este método para:
  • Invalidar la transacción de la sesión actual en Auth0
  • Denegar la transacción actual
  • Revocar todos los tokens de actualización asociados a la sesión existente que tengan un valor session_id coincidente.
    • Esta es una opción configurable; puede optar por conservar los tokens de actualización en lugar de revocarlos. Esta operación se ejecuta de forma asíncrona y, con el tiempo, alcanza la consistencia.
Si desea usar el método api.session.revoke(reason,options), asegúrese de que la propiedad event.session.id exista.A diferencia de api.access.deny(), api.session.revoke() denegará la transacción actual y también revocará la sesión; por lo tanto, volverá a ser necesaria la autenticación del primer factor

Supervisa los eventos de registro de revocación

La operación de revocación agrega el siguiente evento de registro en los registros del inquilino: Un código de evento session_revoked que indica que se revocó una sesión con su atributo session_id asociado.

Cambie las fechas de vencimiento de las sesiones con Actions

Puede modificar las fechas de vencimiento de la sesión con los siguientes métodos post-login:
  • api.session.setExpiresAt(absolute) le permite definir una nueva fecha de vencimiento absoluta de la sesión (Requerir inicio de sesión después de) para una sesión específica.
  • api.session.setIdleExpiresAt(idle) le permite establecer una nueva fecha de tiempo de espera por inactividad para una sesión específica.
Puede usar estos métodos para personalizar dinámicamente la duración de la sesión y las políticas de inactividad en función de lo siguiente:
  • La organización de un usuario
  • La conexión de Auth0 de un usuario
  • La pertenencia de un usuario específico a un grupo o su perfil
  • La evaluación de riesgos
  • Cualquier otro criterio dinámico disponible durante la ejecución de la Action
Si quiere usar los métodos api.session.setExpiresAt(absolute) y api.session.setIdleExpiresAt(idle), asegúrese de que exista una propiedad del objeto event.session, como event.session.id.El método api.session.setIdleExpiresAt(idle) establece el tiempo de espera por inactividad de la sesión para la interacción actual. Si no vuelve a aplicarse, las interacciones correctas posteriores reemplazarán el tiempo de espera por inactividad con la configuración de tiempo de espera por inactividad de la sesión.
El método api.session.setCookieMode(options) de post-login le permite modificar la persistencia de la cookie de sesión. Puede configurar si una cookie de sesión es persistente o no persistente. Las sesiones no persistentes (efímeras) mejoran la seguridad porque solo existen en memoria. Estas sesiones se eliminan cuando se cierra el navegador o la aplicación, lo que las hace ideales para flujos sensibles, como el acceso desde dispositivos no confiables o escenarios de autenticación reforzada. Puede usar este método para:
  • Forzar sesiones efímeras para usuarios con roles o en grupos de alto riesgo
  • Requerir una nueva autenticación al cerrar el navegador para ciertos dispositivos o rangos de IP
  • Acortar la duración de la sesión en entornos no confiables o compartidos (por ejemplo, equipos públicos)
Este método acepta los siguientes parámetros:
PropiedadTipoDescripción
persistentstringLa sesión se almacena en una cookie persistente y se mantiene aunque se reinicie el navegador, a menos que se elimine manualmente.
non-persistentstringLa sesión se almacena solo en memoria y se elimina cuando se cierra el navegador o la aplicación.
El método api.session.setCookieMode() anula la configuración predeterminada del inquilino para la sesión actual.Auth0 conserva la configuración de persistencia durante toda la sesión y no es necesario volver a establecerla en futuros flujos de autenticación silenciosa.El método api.session.setCookieMode() debe usarse dentro de una Action de post-login. Si se usa en un contexto en el que api.session no está disponible, la llamada falla silenciosamente.
Para obtener más información sobre cómo implementar la persistencia de la cookie de sesión, consulte Configurar Keep Me Signed In con Sessions.

Limitaciones

Las sesiones emitidas antes del lanzamiento de los métodos de la API de post-login api.session.setExpiresAt(absolute) y api.session.setIdleExpiresAt(idle) no contendrán la siguiente propiedad de event.session: last_interacted_at. Las sesiones emitidas antes del lanzamiento del método de la API de post-login api.session.revoke(reason, options) no contendrán las siguientes propiedades de event.session.device:
  • initial_ip
  • initial_asn
  • initial_user_agent
Por motivos de seguridad, los tiempos de espera por inactividad y los tiempos de espera absolutos no pueden establecerse por encima de la configuración de sesión definida en los límites de duración de la sesión para el inquilino. Si intenta establecer una fecha por encima de los límites de duración, los métodos de la API la ajustarán a esos límites y registrarán un evento de advertencia (w) en los registros del inquilino.

Casos de uso: Revocar una sesión

Puede usar Actions para configurar detecciones de riesgo y revocar sesiones de riesgo y sus tokens de actualización asociados mediante el método post-login api.session.revoke(reason, options) y el objeto event.session.

Revocar una sesión debido a la vinculación a una red ASN

Puede usar las propiedades del objeto post-login, event.session.device.initial_asn y event.request.asn, para vincular las transacciones de la sesión a una red específica de número de sistema autónomo (ASN) durante toda la sesión y exigir una nueva autenticación si la red ASN cambia.
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialAsn = event.session?.device?.initial_asn;
  const sessionCurrentAsn = event.request.asn;

  // si hay una sesión y el ASN cambia
  if (
    sessionInitialAsn &&
    sessionCurrentAsn &&
    sessionInitialAsn != sessionCurrentAsn
  ) {
    api.session.revoke( "Invalid network change. Login again from a trusted network" )
  }
};
En este ejemplo, se realiza una comprobación al inicio de la Action para verificar que las propiedades event.session.device.initial_asn y event.request.asn permanezcan en la misma red ASN durante la transacción. Si esta comprobación falla, la Action llama a  api.session.revoke() para:
  • Invalidar la sesión
  • Denegar la transacción actual
  • Revocar todos los tokens de actualización asociados
  • Solicitar que el usuario vuelva a autenticarse

Revocar una sesión por vinculación de IP

Puede usar las propiedades del objeto de post-login event.session.device.initial_ip y event.request.ip para garantizar que una transacción de sesión mantenga la misma dirección IP durante toda su duración. En este escenario, cualquier cambio de IP se considera un riesgo y se le solicitará al usuario que vuelva a autenticarse.
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialIp = event.session?.device?.initial_ip;
  const sessionCurrentIp = event.request.ip;

  // si hay una sesión y la IP cambia
  if (
    sessionInitialIp &&
    sessionCurrentIp &&
    sessionInitialIp != sessionCurrentIp
  ) {
    api.session.revoke("Invalid IP change")
  }
};
En este ejemplo, se realiza una comprobación al inicio de la Action para verificar que las propiedades event.session.device.initial_ip y event.request.ip conserven la misma dirección IP durante la transacción. Si la comprobación falla, la Action llama a  api.session.revoke() para:
  • Invalidar la sesión
  • Denegar la transacción actual
  • Revocar todos los tokens de actualización asociados
  • Solicitar una nueva autenticación

Casos de uso: Personalizar las fechas de vencimiento de una sesión

Puede usar Actions para personalizar las fechas de vencimiento por inactividad y las fechas de vencimiento absolutas de la sesión. En concreto, puede configurar las fechas de vencimiento de una transacción de sesión específica mediante los métodos de post-login api.session.setExpiresAt(absolute) y api.session.setIdleExpiresAt(idle), y el objeto event.session.

Personalice el tiempo de expiración absoluta de la sesión en función de las conexiones

Puede usar las siguientes propiedades del objeto post-login para definir la duración de la conexión utilizada para autenticar a un usuario.
  • event.session.created_at
  • event.session.expires_at
Y, al usar la Auth0 Management API para crear metadatos de conexión, event.connection.metadata.session_timeout define un tiempo de espera específico para la conexión.
exports.onExecutePostLogin = async (event, api) => {
  const created = Date.parse(event.session?.created_at ?? "");

  // duración de sesión deseada para esta conexión en milisegundos, configurada como metadatos de la conexión
  const connection_lifetime = event.connection?.metadata?.session_timeout;

  // si hay una duración de sesión definida para la conexión, establecerla
  if (event.session?.id && connection_lifetime) {
    api.session.setExpiresAt(created + Number(connection_lifetime));
  }
};
En este ejemplo, se realiza una comprobación al inicio de la Action para verificar que haya un session_timeout definido en la conexión actual. En ese caso, la Action establece el vencimiento de la sesión para que coincida con el momento en que se created la sesión más el connection_lifetime.

Personalice el tiempo de espera por inactividad de la sesión según la Organización

Puede definir una variable current_time y, con unos nuevos metadatos de la Organización llamados idle_session_timeout, establecer el tiempo de espera por inactividad deseado para una organización.
exports.onExecutePostLogin = async (event, api) => {
  // Los metadatos de la organización están configurados con un tiempo de inactividad más corto para las sesiones (en milisegundos)
  const idle_organization_lifetime =
    event.organization?.metadata?.idle_session_timeout;

  // Si la organización tiene un tiempo de inactividad específico definido, establecer el tiempo de espera
  if (event.session?.id && idle_organization_lifetime) {
    const current_time = new Date().getTime();

    api.session.setIdleExpiresAt(
      current_time + Number(idle_organization_lifetime),
    );
  }
};
En este ejemplo, si hay un tiempo de espera de inactividad específico definido para la Organización, la Action establece el tiempo de espera de inactividad de la sesión para que sea igual a current_time más idle_organization_lifetime.