Passer au contenu principal
L’utilisation de Actions avec les sessions vous permet de configurer des mécanismes de détection des risques et de réponse après l’authentification afin de protéger vos applications et vos utilisateurs contre le détournement de session. Vous pouvez aussi personnaliser dynamiquement les limites de durée de vie des sessions. À cette fin, les Actions post-login comportent deux objets clés :
  • event.session: Fournit des renseignements pertinents, notamment l’id unique, les dates created_at, expires_at, idle_expires_at, updated_at et authentication_at, ainsi que des renseignements sur clients et device, comme ASN, IP et User_agent.
  • api.session: Vous permet de gérer les sessions existantes en les révoquant ou en modifiant les dates d’expiry.
Les objets event.session et api.session prennent tous deux en charge les flux interactifs Web, y compris le flux de code d’autorisation, le flux implicite, le flux de code d’appareil, ainsi que et . Vous pouvez utiliser l’objet event.session pour examiner les horodatages des interactions les plus récentes 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, comme 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 : Découvrez l’objet Event de session et ses propriétés.
  • Objet API : Découvrez l’objet API de session et ses méthodes.

Révoquer des sessions avec Actions

La méthode post-login api.session.revoke(reason, options) vous permet de réagir aux risques associés à une transaction. Cette méthode inclut une option vous permettant de conserver les liés à la transaction révoquée. En plus de révoquer la session, la méthode déclenche également un initiateur de déconnexion OIDC Back-Channel session-revoked pour déconnecter les utilisateurs de toutes les applications liées à la session en cours et consigne un événement session_revoked dans les journaux du locataire. Vous pouvez utiliser cette méthode pour :
  • Invalider la transaction de session en cours dans Auth0
  • Refuser la transaction en cours
  • Révoquer tous les jetons d’actualisation associés à la session existante ayant une valeur session_id correspondante.
    • Il s’agit d’une option configurable; vous pouvez choisir de conserver les jetons d’actualisation au lieu de les révoquer. Cette opération s’exécute de manière asynchrone et devient éventuellement cohérente.
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, une authentification par premier facteur sera de nouveau requise.

Surveiller les événements de journal liés à la révocation

L’opération de révocation ajoute l’événement de journal suivant dans les journaux de votre locataire : Un code d’événement session_revoked indiquant qu’une session a été révoquée, avec l’attribut session_id associé.

Modifier les dates d’expiration des sessions avec Actions

Vous pouvez modifier les dates d’expiration des sessions à l’aide des méthodes post-login suivantes :
  • api.session.setExpiresAt(absolute) vous permet de définir une nouvelle date d’expiration absolue de session (Exiger une nouvelle connexion après) pour une session donnée.
  • api.session.setIdleExpiresAt(idle) vous permet de définir une nouvelle date d’expiration après inactivité pour une session donnée.
Vous pouvez utiliser ces méthodes pour personnaliser dynamiquement la durée de vie de la session et les politiques d’inactivité en fonction de ce qui suit :
  • l’organisation d’un utilisateur
  • la connexion Auth0 d’un utilisateur
  • l’appartenance d’un utilisateur à un groupe ou son profil
  • l’évaluation des risques
  • tout autre critère dynamique disponible pendant l’exécution de l’Action
Si vous voulez 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, comme event.session.id.La méthode api.session.setIdleExpiresAt(idle) définit le délai d’expiration d’inactivité de la session pour l’interaction en cours. Si vous ne réappliquez pas la méthode, les interactions réussies suivantes remplaceront ce délai d’expiration par les paramètres de délai d’expiration d’inactivité de la session.
La méthode post-login api.session.setCookieMode(options) vous permet de modifier la persistance du témoin de session. Vous pouvez configurer un témoin de session comme persistant ou non persistant. Les sessions non persistantes (éphémères) améliorent la sécurité, car elles n’existent qu’en mémoire. Elles sont effacées lorsqu’un navigateur ou une application est fermé, ce qui les rend idéales pour les flux sensibles, comme l’accès à partir d’un appareil non fiable ou les scénarios d’authentification renforcée. Vous pouvez utiliser cette méthode pour :
  • Imposer des sessions éphémères aux utilisateurs ayant des rôles à risque élevé ou appartenant à des groupes à risque élevé
  • Exiger une réauthentification à la fermeture du navigateur pour certains appareils ou certaines plages d’adresses IP
  • Réduire la durée de vie des sessions dans des environnements non fiables ou partagés (p. ex., des ordinateurs publics)
Cette méthode accepte les paramètres suivants :
PropriétéTypeDescription
persistentstringLa session est stockée dans un témoin persistant et survit aux redémarrages du navigateur, à moins d’être effacée manuellement.
non-persistentstringLa session est stockée uniquement en mémoire et est effacée lorsque le navigateur ou l’application est fermé.
La méthode api.session.setCookieMode() remplace le paramètre par défaut du locataire pour la session en cours.Auth0 conserve ce paramètre de persistance pendant toute la session; il n’est pas nécessaire de le définir de nouveau lors de futures authentifications silencieuses.La méthode api.session.setCookieMode() doit être utilisée dans une Action post-login. Si elle est utilisée dans un contexte où api.session n’est pas disponible, l’appel échoue silencieusement.
Pour savoir comment mettre en œuvre la persistance du témoin de session, consultez Configure Keep Me Signed In using Sessions.

Limitations

Les sessions émises avant la mise en disponibilité des méthodes d’API post-login api.session.setExpiresAt(absolute) et api.session.setIdleExpiresAt(idle) ne contiendront pas la propriété suivante de event.session : last_interacted_at. Les sessions émises avant la mise en disponibilité de la méthode d’API post-login api.session.revoke(reason, options) ne contiendront pas les propriétés suivantes de event.session.device :
  • initial_ip
  • initial_asn
  • initial_user_agent
Pour des raisons de sécurité, les délais d’expiration absolus et d’inactivité ne peuvent pas dépasser les paramètres de session définis dans les limites de durée de vie des sessions pour le locataire. Si vous tentez de définir une date au-delà de ces limites, les méthodes d’API effectueront la mise à jour jusqu’aux limites de durée de vie et consigneront un événement d’avertissement (w) dans les journaux du locataire.

Cas d’utilisation : Révoquer une session

Vous pouvez utiliser Actions pour configurer la détection des risques et révoquer les sessions à risque ainsi que les jetons d’actualisation qui y sont associés à l’aide de la méthode post-login api.session.revoke(reason, options) et de l’objet event.session.

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

Vous pouvez utiliser les propriétés de l’objet post-login, event.session.device.initial_asn et event.request.asn, pour lier les transactions de session à un numéro de système autonome (ASN) précis pendant toute leur durée et exiger une réauthentification si le réseau ASN change.
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialAsn = event.session?.device?.initial_asn;
  const sessionCurrentAsn = event.request.asn;

  // s'il existe une session et que l'ASN change
  if (
    sessionInitialAsn &&
    sessionCurrentAsn &&
    sessionInitialAsn != sessionCurrentAsn
  ) {
    api.session.revoke( "Invalid network change. Login again from a trusted network" )
  }
};
Dans cet exemple, une vérification est effectuée au début de l’Action pour s’assurer que 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 les jetons d’actualisation associés
  • Exiger une nouvelle authentification

Révoquer une session en raison d’une liaison à une adresse IP

Vous pouvez utiliser les propriétés event.session.device.initial_ip et event.request.ip de l’objet post-login 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.
exports.onExecutePostLogin = async (event, api) => {
  const sessionInitialIp = event.session?.device?.initial_ip;
  const sessionCurrentIp = event.request.ip;

  // s'il y a une session et que l'adresse IP change
  if (
    sessionInitialIp &&
    sessionCurrentIp &&
    sessionInitialIp != sessionCurrentIp
  ) {
    api.session.revoke("Invalid IP change")
  }
};
Dans cet exemple, une vérification est effectuée au début de l’Action pour s’assurer que les propriétés event.session.device.initial_ip et event.request.ip correspondent à la même adresse IP pendant la transaction. Si la vérification échoue, l’Action appelle ensuite api.session.revoke() pour :
  • Invalider la session
  • Refuser la transaction en cours
  • Révoquer tous les jetons d’actualisation associés
  • Exiger une nouvelle authentification

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

Vous pouvez utiliser Actions pour personnaliser les dates d’expiration absolue et d’inactivité d’une session. Plus précisément, vous pouvez configurer les dates d’expiration pour une transaction de session donnée à l’aide des méthodes post-login api.session.setExpiresAt(absolute) et api.session.setIdleExpiresAt(idle), ainsi que de l’objet event.session.

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

Vous pouvez utiliser les propriétés suivantes de l’objet post-login pour définir une durée de vie pour la connexion utilisée afin d’authentifier un utilisateur.
  • event.session.created_at
  • event.session.expires_at
De plus, en utilisant la Management API d’Auth0 pour créer des métadonnées de connexion, event.connection.metadata.session_timeout définit un délai d’expiration propre à la connexion.
exports.onExecutePostLogin = async (event, api) => {
  const created = Date.parse(event.session?.created_at ?? "");

  // durée de vie de session souhaitée pour cette connexion en millisecondes, configurée en tant que métadonnées de connexion
  const connection_lifetime = event.connection?.metadata?.session_timeout;

  // si une durée de vie de session est définie pour la connexion, l'appliquer
  if (event.session?.id && connection_lifetime) {
    api.session.setExpiresAt(created + Number(connection_lifetime));
  }
};
Dans cet exemple, une vérification est effectuée au début de l’Action pour s’assurer qu’un session_timeout est défini dans la connexion actuelle. Dans ce cas, l’Action définit l’expiration de la session pour qu’elle corresponde au moment où la session a été created, plus le connection_lifetime.

Personnaliser le délai d’inactivité de la session en fonction de l’Organisation

Vous pouvez définir une variable current_time et utiliser une nouvelle métadonnée d’Organisation appelée idle_session_timeout pour définir le délai d’inactivité souhaité pour une organisation.
exports.onExecutePostLogin = async (event, api) => {
  // Les métadonnées de l'organisation sont configurées avec un délai d'inactivité plus court pour les sessions (en millisecondes)
  const idle_organization_lifetime =
    event.organization?.metadata?.idle_session_timeout;

  // Si l'organisation a un délai d'inactivité spécifique défini, appliquer ce délai
  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’expiration d’inactivité spécifique est défini pour l’Organisation, l’Action règle le délai d’inactivité de la session à current_time plus idle_organization_lifetime.