Skip to Content

Sessions & Rotation Token

Quand un utilisateur se connecte à une application basée sur Auris, le système crée une session. Cette session est l’enregistrement autoritatif de l’état authentifié de l’utilisateur. Comprendre comment fonctionnent les sessions, comment les tokens rotatent et comment Auris détecte le vol de tokens est essentiel pour construire des applications sécurisées.

Qu’est-ce qu’une Session dans Auris ?

Une session dans Auris est un enregistrement côté serveur stocké dans la base de données (via Prisma), pas un cookie ou token côté client. Chaque session contient :

ChampDescription
idIdentifiant unique de la session
userIdL’utilisateur authentifié
sessionTokenToken opaque stocké dans un cookie httpOnly sur le client
accessTokenL’access token (JWT) émis le plus récemment
refreshTokenLe refresh token (chaîne opaque) émis le plus récemment
tokenFamilyIdentifiant reliant tous les refresh tokens dans la chaîne de rotation de cette session
createdAtQuand la session a été créée (utilisé pour l’expiration absolue)
lastActiveAtQuand la session a été utilisée pour la dernière fois (utilisé pour l’expiration sliding)
expiresAtQuand la session expire
ipAddressAdresse IP du login original
userAgentIdentifiant browser/appareil du login original
acrAuthentication Context Class Reference (le niveau de force de l’authentification)
amrAuthentication Methods Reference (quels facteurs ont été utilisés : password, otp, webauthn)

La distinction clé : les sessions Auris sont server-authoritative. Le serveur sait toujours quelles sessions existent, lesquelles sont actives et peut révoquer n’importe quelle session instantanément. On ne se fie pas uniquement à l’expiration du token pour la terminaison de session.

Cycle de Vie de la Session

Création de Session

Quand l’authentification réussit (après tous les facteurs incluant MFA, vérifications de risque adaptatif et hooks de l’Actions Engine), Auris :

  1. Crée un enregistrement OAuthSession dans la base de données
  2. Génère un sessionToken aléatoire et le définit comme cookie httpOnly (TTL 30 minutes, renouvelé à chaque utilisation)
  3. Émet un access token (JWT signé) avec les claims utilisateur, rôles et custom claims
  4. Émet un refresh token (chaîne opaque avec préfixe rt_)
  5. Assigne un identifiant tokenFamily reliant tous les futurs refresh tokens dans cette session

Utilisation Active

Durant la durée active de la session, le client envoie l’access token à chaque requête API. Le resource server valide la signature JWT localement (via JWKS) sans contacter Auris. Aucune lookup dans la base de données n’a lieu pour la validation de l’access token, ce qui maintient la latence faible.

Rafraîchissement

Quand l’access token expire, le client envoie le refresh token à l’endpoint token. Auris :

  1. Recherche le refresh token dans la base de données
  2. Valide qu’il n’a pas déjà été utilisé (vérification de rotation)
  3. Valide que la session n’a pas expiré (vérification absolue et sliding)
  4. Invalide l’ancien refresh token (le marque comme utilisé)
  5. Émet un nouvel access token et un nouveau refresh token
  6. Met à jour lastActiveAt sur la session (réinitialise la fenêtre sliding)

Terminaison

Les sessions se terminent à travers plusieurs mécanismes :

MécanismeQuand ça ArriveEffet
Logout expliciteL’utilisateur clique “Se déconnecter”Session supprimée, tous les tokens pour cette session invalidés
Expiration slidingAucun rafraîchissement dans la fenêtre d’inactivitéLa session expire
Expiration absolueLa session est active depuis plus du maximum absoluLa session expire indépendamment de l’activité
Révocation adminL’admin révoque la session depuis la ConsoleSession supprimée immédiatement
Détection de réutilisationUn refresh token déjà utilisé est présentéToute la famille de tokens est révoquée
Action de compteUtilisateur désactivé, supprimé ou mot de passe changéToutes les sessions pour l’utilisateur sont révoquées

Rotation du Refresh Token

La rotation du refresh token est un mécanisme de sécurité dans lequel chaque rafraîchissement de token réussi invalide l’ancien refresh token et en émet un nouveau. Auris implémente la rotation par défaut sans possibilité de la désactiver.

Pourquoi Faire Pivoter ?

Sans rotation, un refresh token volé reste valide jusqu’à son expiration naturelle (7 jours par défaut). L’attaquant peut l’utiliser pour obtenir de nouveaux access tokens indéfiniment dans cette fenêtre, même si l’utilisateur légitime continue d’utiliser l’application.

Avec la rotation, un refresh token volé ne peut être utilisé qu’une seule fois. Si l’utilisateur légitime rafraîchit en premier (ce qui est le cas commun), le token volé devient invalide. Si l’attaquant rafraîchit en premier, la tentative de rafraîchissement suivante de l’utilisateur légitime déclenche la détection de réutilisation.

Familles de Tokens

Chaque refresh token dans Auris est associé à un tokenFamily — un identifiant reliant tous les refresh tokens dans une seule chaîne de session. Quand une réutilisation de refresh token est détectée :

  1. Auris vérifie quelle session est propriétaire du token réutilisé
  2. Identifie la famille de tokens pour cette session
  3. Révoque tous les tokens dans cette famille (toute la session)
  4. La révocation empêche l’attaquant d’utiliser n’importe quel token précédent dans la chaîne

Expiration Absolue vs. Sliding

Auris applique deux types d’expiration à chaque session :

Expiration Absolue : La session expire après un maximum absolu (défaut : 24 heures) depuis sa création, indépendamment de l’activité.

Expiration Sliding (Inactivité) : La session expire après une période d’inactivité (défaut : 1 heure). Chaque fois qu’un rafraîchissement est effectué, la fenêtre sliding se réinitialise.

La session expire quand la première des deux conditions est atteinte. Cet équilibre garantit que :

  • Les utilisateurs actifs restent connectés sans devoir se ré-authentifier fréquemment
  • Les sessions abandonnées (aucune activité) expirent de manière opportune
  • Il existe une garantie temporelle absolue pour la sécurité

Sessions Multi-Dispositifs

Chaque login depuis un appareil différent crée une session séparée. Par défaut, Auris autorise jusqu’à 5 sessions concurrentes par utilisateur.

Quand la limite est atteinte, le login depuis un nouvel appareil révoque la session active la plus ancienne.

Voir les Sessions Actives

Les utilisateurs peuvent voir et gérer leurs sessions actives via ton application en utilisant les API de gestion des sessions. Le champ userAgent permet d’afficher “iPhone” ou “Chrome sur Windows” pour aider les utilisateurs à identifier les sessions non reconnues.

Concepts Associés