Description
Le serveur rejette périodiquement des requêtes authentifiées avec l'erreur jwt expired, alors que la session utilisateur est toujours active côté client.
Le client (apps/client/src/api/xhr-client.ts) attache keycloak.token sans appeler keycloak.updateToken() au préalable.
Le rafraîchissement ne s'effectue que via le timer passif onTokenExpired et un contournement dans onAuthSuccess : toute requête émise à proximité de l'expiration — ou après une période d'onglet inactif (timers throttlés par le navigateur) — transporte un JWT déjà expiré.
Le gestionnaire 401 (extractData) ne redirige vers le login que si !keycloak.authenticated ; il ne tente jamais de rafraîchir le token.
Etapes de reproduction
- Ouvrir la console et laisser l'onglet en arrière-plan jusqu'à l'expiration de l'access token Keycloak
- Revenir sur l'onglet et déclencher une requête API
- Le serveur répond 401 avec
jwt expired
Captures d'écran
Logs
UnauthorizedException: jwt expired
Navigateurs
Tous
OS
Tous
Version de la console impactée
apps/client (xhr-client) avec apps/server-nestjs (KeycloakJwtService)
Définition du fini
Description
Le serveur rejette périodiquement des requêtes authentifiées avec l'erreur
jwt expired, alors que la session utilisateur est toujours active côté client.Le client (
apps/client/src/api/xhr-client.ts) attachekeycloak.tokensans appelerkeycloak.updateToken()au préalable.Le rafraîchissement ne s'effectue que via le timer passif
onTokenExpiredet un contournement dansonAuthSuccess: toute requête émise à proximité de l'expiration — ou après une période d'onglet inactif (timers throttlés par le navigateur) — transporte un JWT déjà expiré.Le gestionnaire 401 (
extractData) ne redirige vers le login que si!keycloak.authenticated; il ne tente jamais de rafraîchir le token.Etapes de reproduction
jwt expiredCaptures d'écran
Logs
Navigateurs
Tous
OS
Tous
Version de la console impactée
apps/client (xhr-client) avec apps/server-nestjs (KeycloakJwtService)
Définition du fini