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

# Sessions avec actions

> En savoir plus sur la gestion des sessions avec Actions

L’utilisation des sessions avec des [Actions](/docs/fr-ca/customize/actions) vous permet de configurer des capacités de détection et de réponse aux risques post-authentification afin de protéger vos applications et vos utilisateurs contre le détournement de session. Vous pouvez également personnaliser dynamiquement [les limites de durée de vie de la session](/docs/fr-ca/manage-users/sessions/configure-session-lifetime-settings).

Pour faciliter cela, les Actions post-connexion comportent deux objets clés :

* **event.session** : Fournit des renseignements pertinents, y compris les données `id`, `created_at`, `expires_at`, `idle_expires_at` et `updated_at`, `clients`, `authentication_at` et des données liées à `device`, comme `ASN`, `IP` et `User_agent`.
* **api.session**: Vous permet de gérer les sessions existantes en révoquant les sessions ou en modifiant les dates d’expiration `expiry`.

Les objets `event.session` et `api.session` prennent en charge les flux interactifs basés sur le Web, y compris le flux de code d’autorisation, le flux implicite, le flux de code d’appareil, ainsi que <Tooltip href="/docs/fr-ca/glossary?term=security-assertion-markup-language" tip="Security Assertion Markup Language (SAML)
Protocole normalisé permettant à deux parties d’échanger des informations d’authentification sans mot de passe." cta="Voir le glossaire">SAML</Tooltip> et <Tooltip href="/docs/fr-ca/glossary?term=ws-fed" tip="Web Service Federation (WS-Fed)
Protocole de gestion des identités des utilisateurs à travers les domaines." cta="Voir le glossaire">WS-Fed</Tooltip>.

Vous pouvez utiliser l’objet `event.session` pour examiner l’horodatage des dernières interactions et évaluer les risques associés aux transactions en cours. Vous pouvez également combiner l’objet `event.session` avec d’autres objets d’événement, tels que `event.authentication` ou `event.request`.

Vous pouvez ensuite utiliser l’objet `api.session` pour réinitialiser les dates d’expiration de la session existante ou révoquer la session.

Pour en savoir plus sur ces objets, consultez :

* [Objet Event](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object) : En savoir plus sur l’objet de session Event et ses propriétés
* [Objet API](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object) : En savoir plus sur l’objet de session API et ses méthodes.

## Révoquer des sessions à l’aide des Actions

La méthode post-connexion **api.session.revoke(reason, options)** vous permet de réagir aux risques associés à une transaction. Cette méthode comprend une option pour vous permettre de conserver les jetons d’actualisation liés à la transaction révoquée.

En plus de révoquer la session, la méthode lancera également un [initiateur de déconnexion de canal d’appui OIDC](/docs/fr-ca/authenticate/login/logout/back-channel-logout/oidc-back-channel-logout-initiators)`session-revoked` pour déconnecter les utilisateurs de toutes les applications liées à la session en cours et enregistrer un événement [session\_revoked](/docs/fr-ca/deploy-monitor/logs/log-event-type-codes) dans les journaux du locataire.

Vous pouvez utiliser cette méthode pour :

* invalider la transaction de la session en cours dans Auth0;
* refuser la transaction en cours;
* révoquer tous les [jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens) associés à la session existante avec une valeur `session_id` correspondante.

  * Il s’agit d’une option personnalisable, vous pouvez choisir de conserver les jetons d’actualisation plutôt que de les révoquer. Cette opération s’exécute de manière asynchrone et devient finalement cohérente.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si vous souhaitez utiliser la méthode `api.session.revoke(reason,options)`, assurez-vous que la propriété event.session.id existe.

  Contrairement à `api.access.deny()`, `api.session.revoke()` refusera la transaction en cours et révoquera également la session, par conséquent l’authentification du premier facteur sera à nouveau requise.
</Callout>

### Surveiller les événements de révocation du journal

L’opération de révocation ajoute l’événement de journal suivant dans vos [journaux du locataire](/docs/fr-ca/deploy-monitor/logs):

Un code d’événement `session_revoked` indiquant une session révoquée avec son attribut `session_id` associé.

## Cas d’utilisation des sessions avec Actions

Vous pouvez modifier [les dates d’expiration](/docs/fr-ca/manage-users/sessions/session-lifetime-limits) de la session avec les méthodes de post-connexion suivantes :

* **api.session.setExpiresAt(absolute)** vous permet de définir une nouvelle date d’expiration de session absolue (Nécessiter la connexion après) pour une session spécifiée.
* **api.session.setIdleExpiresAt(idle)** vous permet de définir une nouvelle date d’expiration du délai d’inactivité pour une session spécifiée.

Vous pouvez utiliser ces méthodes pour personnaliser dynamiquement les stratégies de durée de vie et d’inactivité de la session en fonction de :

* L’organisation d’un utilisateur
* La connexion Auth0 d’un utilisateur
* L’adhésion ou le profil de groupe d’un utilisateur spécifique
* L’évaluation des risques
* Tout autre critère dynamique disponible lors de l’exécution de l’Action

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si vous souhaitez utiliser les méthodes `api.session.setExpiresAt(absolute)` et `api.session.setIdleExpiresAt(idle)`, assurez-vous qu’une propriété de l’objet event.session existe, telle que `event.session.id`.

  La `méthode api.session.setIdleExpiresAt(idle)` définit le délai d’inactivité de la session pour l’interaction en cours. Si la méthode n’est pas réappliquée, les interactions ultérieures réussies remplaceront le délai d’inactivité à l’aide des paramètres de délai d’inactivité de la session.
</Callout>

## Limites

Les sessions émises avant la publication des méthodes API post-connexion `api.session.setExpiresAt(absolute)` et `api.session.setIdleExpiresAt(idle)` ne contiendront pas la propriété event.session suivante : `last_interacted_at`.

Les sessions émises avant la publication de la méthode API post-connexion `api.session.revoke(reason, options)` ne contiendront pas les propriétés event.session.device suivantes :

* `initial_ip`
* `initial_asn`
* `initial_user_agent`

Pour des raisons de sécurité, les délais d’inactivité et absolu ne peuvent pas être définis au-dessus des paramètres de la session définis dans les [limites de la durée de vie de la session](/docs/fr-ca/manage-users/sessions/configure-session-lifetime-settings) pour le locataire. Si vous tentez de définir une date au-dessus des limites de la durée de vie, les méthodes de l’API la mettront à jour en fonction des limites de durée de vie et enregistreront un événement d’avertissement (`w`) dans les journaux du locataire.

## Cas d’utilisation : Révoquer une session

Vous pouvez utiliser les [Actions](/docs/fr-ca/customize/actions) pour configurer les détections de risques et révoquer les sessions risquées et leurs jetons d’actualisation associés avec la méthode post-connexion `api.session.revoke(reason, options)` et l’objet `event.session`.

### Révoquer une session en raison d’une liaison réseau ASN

Vous pouvez utiliser les propriétés de l’objet post-connexion, `event.session.device.initial_asn` et `event.request.asn` pour lier les transactions de session à un réseau [autonomous system number (ASN)](https://www.arin.net/resources/guide/asn/) spécifique pour leur durée et nécessiter une réauthentification si le réseau ASN change.

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialAsn = event.session?.device?.initial_asn;
  const sessionCurrentAsn = event.request.asn;

  // if there is a session and the ASN changes
  if (
    sessionInitialAsn &&
    sessionCurrentAsn &&
    sessionInitialAsn != sessionCurrentAsn
  ) {
    api.session.revoke( "Invalid network change. Login again from a trusted network" )
  }
};
```

Dans cet exemple, une vérification se produit au début de l’Action pour vérifier si les propriétés `event.session.device.initial_asn` et `event.request.asn` restent dans le même réseau ASN pendant la transaction. Si cette vérification échoue, l’Action appelle  `api.session.revoke()` pour :

* invalider la session;
* refuser la transaction en cours;
* révoquer tous ses jetons d’actualisation associés;
* inviter à la réauthentification.

### Révoquer une session en raison d’une liaison IP

Vous pouvez utiliser les propriétés de l’objet post-connexion `event.session.device.initial_ip` et `event.request.ip` pour vous assurer qu’une transaction de session conserve la même adresse IP pendant toute sa durée. Dans ce scénario, tout changement d’adresse IP est considéré comme un risque et l’utilisateur sera invité à se réauthentifier.

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialIp = event.session?.device?.initial_ip;
  const sessionCurrentIp = event.request.ip;

  // if there is a session and the IP changes
  if (
    sessionInitialIp &&
    sessionCurrentIp &&
    sessionInitialIp != sessionCurrentIp
  ) {
    api.session.revoke("Invalid IP change")
  }
};
```

Dans cet exemple, une vérification se produit au début de l’Action pour vérifier si les propriétés `event.session.device.initial_ip` et `event.request.ip` conservent la même adresse IP pendant la transaction. Si la vérification échoue, l’Action appelle alors `api.session.revoke()` pour :

* invalider la session;
* refuser la transaction en cours;
* révoquer tous ses jetons d’actualisation associés;
* inviter à la réauthentification.

## Cas d’utilisation : Personnaliser les dates d’expiration d’une session

Vous pouvez utiliser des [Actions](/docs/fr-ca/customize/actions) pour personnaliser les dates d’expiration d’inactivité et absolue de la session. Plus précisément, vous pouvez configurer les dates d’expiration d’une transaction de session particulière à l’aide des méthodes post-connexion `api.session.setExpiresAt(absolute)` et `api.session.setIdleExpiresAt(idle)` et de l’objet `event.session`.

### Personnalisation le délai d’expiration absolu de la session en fonction des connexions

Vous pouvez utiliser les propriétés d’objet post-connexion suivantes pour définir une durée de vie pour la connexion utilisée pour authentifier un utilisateur.

* event.session.created\_at
* event.session.expires\_at

Et vous pouvez utiliser la [Management API](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id) d‘Auth0 pour créer une métadonnée de connexion, `event.connection.metadata.session_timeout define` un délai d’expiration de connexion spécifique.

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const created = Date.parse(event.session?.created_at ?? "");

  // desired session lifetime for this connection in milliseconds, configured as connection metadata
  const connection_lifetime = event.connection?.metadata?.session_timeout;

  // if there is a session lifetime defined for the connection, set it
  if (event.session?.id && connection_lifetime) {
    api.session.setExpiresAt(created + Number(connection_lifetime));
  }
};
```

Dans cet exemple, une vérification se produit au début de l’Action pour vérifier s’il y a une valeur `session_timeout` définie dans la connexion actuelle. Dans ce cas, l’Action définit l’expiration de la session comme étant égale à la date de création `created` de la session, plus le paramètre `connection_lifetime`.

### Personnalisation du délai d’inactivité de session en fonction de l’organisation

Vous pouvez définir une variable `current_time` et utiliser une nouvelle métadonnée d’Organization appelée `idle_session_timeout` pour définir le délai d’inactivité souhaité pour une organization.

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  // The Organization metadata is configured with a shorter idle timeout for sessions (in milliseconds)
  const idle_organization_lifetime =
    event.organization?.metadata?.idle_session_timeout;

  // If the organization has an specific idle timeout defined, set the timeout
  if (event.session?.id && idle_organization_lifetime) {
    const current_time = new Date().getTime();

    api.session.setIdleExpiresAt(
      current_time + Number(idle_organization_lifetime),
    );
  }
};
```

Dans cet exemple, si un délai d’inactivité spécifique est défini pour l’Organization, l’Action définit le délai d’inactivité de la session comme étant égal à la valeur `current_time` plus la valeur `idle_organization_lifetime`.
