Sessions avec actions
L’utilisation des sessions avec des 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.
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
etupdated_at
,clients
,authentication_at
et des données liées àdevice
, commeASN
,IP
etUser_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 SAML et WS-Fed.
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 : En savoir plus sur l’objet de session Event et ses propriétés
Objet API : 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 OIDCsession-revoked
pour déconnecter les utilisateurs de toutes les applications liées à la session en cours et enregistrer un événement session_revoked 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 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.
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:
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 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
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 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 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) spécifique pour leur durée et nécessiter 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;
// 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" )
}
};
Was this helpful?
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.
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")
}
};
Was this helpful?
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 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 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.
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));
}
};
Was this helpful?
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.
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),
);
}
};
Was this helpful?
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
.