> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Obtén información sobre cómo administrar sesiones con Actions

# Sesiones con Actions

Usar [Actions](/es/docs/customize/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](/es/docs/manage-users/sessions/configure-session-lifetime-settings).

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](/es/docs/get-started/authentication-and-authorization-flow/authorization-code-flow), el flujo implícito, el flujo de código de dispositivo, así como <Tooltip tip="Security Assertion Markup Language (SAML): Protocolo estandarizado que permite a dos partes intercambiar información de autenticación sin una contraseña." cta="Ver glosario" href="/es/docs/glossary?term=SAML">SAML</Tooltip> y <Tooltip tip="Security Assertion Markup Language (SAML): Protocolo estandarizado que permite a dos partes intercambiar información de autenticación sin una contraseña." cta="Ver glosario" href="/es/docs/glossary?term=WS-Fed">WS-Fed</Tooltip>.

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](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object): Obtén información sobre el objeto Event de sesión y sus propiedades.
* [Objeto API](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object): Obtén información sobre el objeto API de sesión y sus métodos.

<div id="revoke-sessions-with-actions">
  ## Revocar sesiones con Actions
</div>

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 <Tooltip tip="Token de actualización: Token utilizado para obtener un nuevo Token de acceso sin obligar a los usuarios a iniciar sesión de nuevo." cta="Ver glosario" href="/es/docs/glossary?term=refresh+tokens">tokens de actualización</Tooltip> 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`](/es/docs/authenticate/login/logout/back-channel-logout/oidc-back-channel-logout-initiators) para cerrar la sesión de los usuarios en todas las aplicaciones vinculadas a la sesión actual y registrará un evento [session\_revoked](/es/docs/deploy-monitor/logs/log-event-type-codes) 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](/es/docs/secure/tokens/refresh-tokens) 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.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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
</Callout>

<div id="monitor-revoke-log-events">
  ### Supervisa los eventos de registro de revocación
</div>

La operación de revocación agrega el siguiente evento de registro en los [registros del inquilino](/es/docs/deploy-monitor/logs):

Un código de evento `session_revoked` que indica que se revocó una sesión con su atributo `session_id` asociado.

<div id="change-sessions-expiry-dates-with-actions">
  ## Cambie las fechas de vencimiento de las sesiones con Actions
</div>

Puede modificar las [fechas de vencimiento](/es/docs/manage-users/sessions/session-lifetime-limits) 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

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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.
</Callout>

<div id="set-session-cookie-persistence-with-actions">
  ## Configurar la persistencia de la cookie de sesión con Actions
</div>

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:

| Propiedad        | Tipo   | Descripción                                                                                                                        |
| ---------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| `persistent`     | string | La sesión se almacena en una cookie persistente y se mantiene aunque se reinicie el navegador, a menos que se elimine manualmente. |
| `non-persistent` | string | La sesión se almacena solo en memoria y se elimina cuando se cierra el navegador o la aplicación.                                  |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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.
</Callout>

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](/es/docs/manage-users/sessions/configure-keep-me-signed-in-sessions).

<div id="limitations">
  ## Limitaciones
</div>

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](/es/docs/manage-users/sessions/configure-session-lifetime-settings) 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.

<div id="use-cases-revoke-a-session">
  ## Casos de uso: Revocar una sesión
</div>

Puede usar [Actions](/es/docs/customize/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`.

<div id="revoke-a-session-due-to-asn-network-binding">
  ### Revocar una sesión debido a la vinculación a una red ASN
</div>

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)](https://www.arin.net/resources/guide/asn/) durante toda la sesión y exigir una nueva autenticación si la red ASN cambia.

```js lines theme={null}
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

<div id="revoke-a-session-due-to-an-ip-binding">
  ### Revocar una sesión por vinculación de IP
</div>

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.

```js lines theme={null}
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

<div id="use-cases-customize-a-session-expiry-dates">
  ## Casos de uso: Personalizar las fechas de vencimiento de una sesión
</div>

Puede usar [Actions](/es/docs/customize/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`.

<div id="customize-absolute-session-expiration-time-based-on-connections">
  ### Personalice el tiempo de expiración absoluta de la sesión en función de las conexiones
</div>

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](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id) para crear metadatos de conexión, `event.connection.metadata.session_timeout` define un tiempo de espera específico para la conexión.

```js lines theme={null}
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`.

<div id="customize-session-inactivity-timeout-based-on-the-organization">
  ### Personalice el tiempo de espera por inactividad de la sesión según la Organización
</div>

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.

```js lines theme={null}
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`.
