Session Token dans le développement d’applications — ce que c’est, principe de fonctionnement et différences avec JWT

Auteur : IT Sectr Publié le : 2026-04-05 Temps de lecture : 9 min

Session Token est un identifiant unique que le serveur crée après l’authentification réussie de l’utilisateur et utilise pour identifier les requêtes suivantes. Contrairement aux jetons autonomes (JWT), le session token est une chaîne aléatoire qui ne contient pas de données en elle-même : toutes les informations de session sont stockées sur le serveur dans la RAM ou une base de données. Selon OAuth.com, 2025, le session token reste le mécanisme d’authentification le plus répandu dans les applications web côté serveur et les architectures mobiles hybrides.

Points clés

  • Session Token — un identifiant aléatoire référençant les données de session côté serveur
  • Stateful — le serveur stocke l’état de la session dans Redis, Memcached ou une base de données
  • Révocation simple — il suffit de supprimer l’enregistrement de session sur le serveur pour que le jeton devienne invalide
  • Sécurité — les données ne sont pas stockées dans le jeton, ce qui élimine leur fuite par décodage
  • Cookie — la méthode traditionnelle de transmission du session token dans les applications web avec les drapeaux HttpOnly, Secure et SameSite

Qu’est-ce qu’un Session Token?

Session Token (identifiant de session) est une chaîne unique que le serveur génère et associe aux données de session après l’authentification de l’utilisateur. Le jeton ne contient aucune information utilisateur — c’est simplement une clé vers les données stockées sur le serveur. Cette approche est appelée authentification stateful : le serveur stocke l’état de chaque session active et le vérifie à chaque requête.

Les données de session incluent : identifiant utilisateur, heure de connexion, adresse IP, user-agent, liste d’autorisations, heure de dernière activité. Lorsque le client envoie une requête avec un session token, le serveur trouve l’enregistrement correspondant dans le stockage de sessions, vérifie sa validité et récupère les données pour traiter la requête. Si l’enregistrement de session est manquant ou a expiré, le serveur renvoie une erreur d’authentification et demande une nouvelle connexion.

Selon OWASP, 2025, le session token reste la norme pour les applications nécessitant une révocation immédiate d’accès — par exemple, dans les systèmes bancaires et les portails d’entreprise où un administrateur doit pouvoir mettre fin à la session d’un utilisateur instantanément. Dans ces systèmes, le session token offre un contrôle total de l’accès qui est inaccessible aux jetons stateless sans mécanismes de blocage supplémentaires.

Comment fonctionne un Session Token

Le processus commence lorsque le client envoie les identifiants au serveur d’authentification. Le serveur vérifie le nom d’utilisateur et le mot de passe, crée un enregistrement de session dans le stockage (généralement Redis ou une base de données) et renvoie un session token unique au client. Le client conserve le jeton et l’envoie avec chaque requête suivante, et le serveur vérifie à chaque fois l’existence et la validité de la session.

Session serveur et stockage

Redis est le stockage de sessions le plus populaire grâce au stockage en mémoire et au support TTL (durée de vie). Chaque session est stockée comme une paire clé-valeur, où la clé est le session token et la valeur est un objet JSON contenant les données de session. Le TTL supprime automatiquement les sessions expirées. Alternatives : Memcached (mémoire seulement, sans persistance sur disque), PostgreSQL/MySQL (persistants mais plus lents) et DynamoDB (pour l’infrastructure AWS).

Exemple de structure de session dans Redis : session:{token}{“userId”: 42, “role”: “admin”, “createdAt”: 1812345678, “lastAccess”: 1812345678}. Le serveur met à jour lastAccess à chaque requête, ce qui permet d’implémenter un délai d’inactivité — une terminaison automatique de la session après une période sans activité.

Cookie vs En-tête

Session Token peut être transmis de deux manières : via un cookie HTTP ou via l’en-tête HTTP Authorization. Les cookies sont la méthode traditionnelle pour les applications web : le serveur définit un cookie avec les drapeaux HttpOnly (inaccessible depuis JavaScript), Secure (HTTPS uniquement) et SameSite (protection CSRF). Pour les applications mobiles, l’en-tête Authorization: Bearer <session_token> est plus couramment utilisé, car le mécanisme de cookie n’est pas toujours pratique dans les clients natifs.

Cycle de vie du Session Token

Le cycle de vie du session token comprend trois étapes : la création, le maintien de la session active et la terminaison. Chaque étape nécessite une configuration de sécurité appropriée pour éviter la fuite ou l’interception du jeton.

Création, stockage et suppression

Création — le serveur génère une chaîne aléatoire cryptographiquement sûre de 128 à 256 bits (par exemple, via SecureRandom en Java ou os.urandom en Python). Le jeton doit être imprévisible — l’utilisation d’UUID ou d’horodatage sans entropie n’est pas acceptable. Stockage côté client : sur iOS — Keychain, sur Android — EncryptedSharedPreferences, sur le web — cookie HttpOnly. Suppression se produit à la déconnexion : le client supprime le jeton du stockage, le serveur supprime l’enregistrement de session de Redis. Après la déconnexion, le session token devient inutile — le serveur ne trouve pas d’enregistrement correspondant.

Selon SANS Institute, 2025, une implémentation correcte de la terminaison de session (déconnexion avec nettoyage côté serveur) prévient jusqu’à 70 % des attaques utilisant des jetons volés. Il est crucial non seulement de supprimer le jeton côté client, mais aussi d’invalider la session sur le serveur.

Session Token vs JWT

Session Token et JWT représentent deux approches différentes de l’authentification. Session Token est stateful (le serveur stocke l’état), JWT est stateless (les données à l’intérieur du jeton). Le choix entre eux dépend de l’architecture de l’application et des exigences de sécurité.

CritèreSession TokenJWT
ModèleStateful (données sur le serveur)Stateless (données dans le jeton)
RévocationInstantanée — supprimer la session de RedisNécessite une liste noire ou un TTL court
Taille16–64 octets500–2000 octets
Stockage des donnéesServeur uniquement (sécurisé)À l’intérieur du jeton (base64, non chiffré)
Passage à l’échelleNécessite un stockage partagé (Redis)Non requis — le jeton est validé localement
Protection CSRFNécessite un cookie SameSite + jeton CSRFNon requis (jeton dans l’en-tête)

Quand choisir Session Token

Session Token est préférable lorsque : une révocation immédiate des sessions est requise (services bancaires, panneaux d’administration), l’application fonctionne sur un ou plusieurs serveurs avec un Redis partagé, les données de session sont volumineuses et ne tiennent pas dans un JWT, ou l’équipe souhaite minimiser le risque de fuite de données par décodage du jeton. Dans ces scénarios, le session token fournit un blocage immédiat de l’accès en cas d’activité suspecte — il suffit de supprimer un enregistrement de Redis pour que toutes les sessions de l’utilisateur deviennent invalides.

Selon Redis, 2025, l’utilisation de TTL au niveau des clés de session (commande EXPIRE) nettoie automatiquement les sessions expirées sans surcharge sur les tâches d’arrière-plan. Pour des sessions avec un TTL d’une heure et une charge de 10 000 utilisateurs simultanés, Redis consomme environ 1 Go de RAM pour une taille de session de 1 Ko, ce qui le rend rentable pour la plupart des applications.

Sécurité du Session Token

La sécurité du session token repose sur deux principes : le jeton doit être imprévisible et protégé lors de la transmission et du stockage. Les principales menaces sont l’interception du jeton (man-in-the-middle, XSS), sa prédiction (génération faible) et la fixation de session (session fixation).

Protection contre le vol du jeton

La protection comprend : l’utilisation de HTTPS pour toutes les requêtes avec jeton, la définition d’un TTL court de session (15–60 minutes d’inactivité), la liaison de la session à l’IP et au user-agent (vérification supplémentaire à chaque requête), l’utilisation des drapeaux Secure et HttpOnly pour les cookies, et la rotation régulière du session token après des opérations sensibles (changement de mot de passe, élévation de privilèges). OWASP recommande également d’implémenter une Gestion de Sessions avec invalidation de l’ancienne session lors de la création d’une nouvelle après connexion — cela empêche la fixation de session.

Selon OWASP ASVS, 2025, une session doit être liée à au moins deux facteurs : le jeton lui-même (ce que le client possède) et l’IP/user-agent (ce que le serveur sait). Si ces facteurs ne correspondent pas, le serveur doit mettre fin à la session et demander une ré-authentification.

Exemple d’implémentation en Kotlin

Ci-dessous un exemple d’implémentation côté serveur d’un session token en Kotlin avec Spring Boot et Redis. Le serveur génère un jeton cryptographiquement sûr via SecureRandom, enregistre la session dans Redis avec TTL et la vérifie à chaque requête. Le code démontre trois opérations principales : la création de session, la validation et l’invalidation.

kotlin
data class Session(
    val userId: Long,
    val role: String,
    val createdAt: Long,
    val lastAccess: Long
)

object SessionManager {
    private val redis = JedisPool("localhost", 6379)

    fun createSession(userId: Long, role: String): String {
        val token = generateSecureToken()
        val session = Session(userId, role, now(), now())
        redis.resource.use { conn ->
            conn.setex("session:$token", 3600, toJson(session))
        }
        return token
    }

    fun validateSession(token: String): Session? {
        redis.resource.use { conn ->
            val json = conn.get("session:$token") ?: return null
            return fromJson(json)
        }
    }

    fun invalidateSession(token: String) {
        redis.resource.use { it.del("session:$token") }
    }

    private fun generateSecureToken(): String {
        val bytes = ByteArray(32)
        SecureRandom().nextBytes(bytes)
        return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)
    }
}

Cette implémentation utilise JedisPool pour une connexion thread-safe à Redis. La méthode createSession définit un TTL d’une heure (3600 secondes) — après cette période, Redis supprimera automatiquement l’enregistrement. La méthode validateSession renvoie null pour les sessions inexistantes ou expirées, ce qui permet au serveur de traiter correctement une requête avec un jeton invalide et de renvoyer HTTP 401.

Questions fréquentes

En quoi le session token diffère-t-il du access token?

Session token est un identifiant de session côté serveur (stateful). L’access token est un identifiant pour l’accès à l’API (peut être JWT ou opaque). Le session token est généralement utilisé pour les sessions web, tandis que l’access token est utilisé pour les requêtes API dans les applications mobiles et SPA. Ils peuvent coexister : session token pour le web, access token pour l’API.

Comment protéger le session token contre les attaques XSS?

La protection principale consiste à définir le drapeau HttpOnly sur le cookie contenant le jeton de session. Ce drapeau interdit l’accès au cookie depuis JavaScript, rendant les attaques XSS inutiles pour voler le jeton. De plus, le drapeau SameSite=Strict empêche l’envoi du cookie avec des requêtes cross-site, protégeant ainsi contre CSRF.

Quelle devrait être la durée de vie d’un session token?

Deux délais sont recommandés : un délai absolu (8–24 heures — durée maximale de la session) et un délai relatif (15–30 minutes d’inactivité — après quoi la session se termine). Pour les applications bancaires, le délai absolu est réduit à 1–2 heures ; pour les clients de messagerie, il peut atteindre 7 jours.

Qu’est-ce que la fixation de session (session fixation)?

Session fixation est une attaque où un attaquant force un utilisateur à utiliser un identifiant de session connu. Protection : après une authentification réussie, le serveur doit créer un nouveau session token plutôt que de continuer à utiliser celui fourni par le client. L’ancien jeton doit être invalidé quelle que soit son origine.

Peut-on utiliser le session token dans une API REST?

Oui, le session token convient à une API REST si le client l’envoie dans l’en-tête Authorization (pas dans un cookie). Pour les applications mobiles, c’est une pratique courante. Inconvénient : lors du passage à l’échelle sur plusieurs serveurs, un stockage de sessions partagé (Redis) est nécessaire, ce qui ajoute un point de défaillance unique dans l’architecture.

Résumé

  • Session Token — identifiant stateful référençant les données de session côté serveur
  • Avantage — révocation instantanée et contrôle total des sessions sur le serveur
  • Stockage — Redis, Memcached ou base de données avec TTL pour un nettoyage automatique
  • Sécurité — génération SecureRandom, HTTPS, cookies HttpOnly + SameSite
  • Session vs JWT — Session est plus facile à révoquer, JWT est plus facile à passer à l’échelle
  • Délais — absolu (8–24h) et relatif (15–30 min d’inactivité)
  • Fixation de session — prévenue en créant un nouveau jeton après la connexion

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi