J'ai une webapp sans état qui utilise un jeton JWT. Finalement, il expirera - ce qui est OK, mais je ne veux pas qu'il expire pendant que l'utilisateur travaille. Au lieu de cela, je voudrais le jeton expire après un certain temps d'inactivité.
Disons que mon jeton est valide 60 minutes, est-il correct d'envoyer n nouveau JWT à chaque demande? De cette façon, tant que l'utilisateur travaillera, son jeton sera renouvelé (tant qu'il fera une demande par heure), mais après plus d'une heure d'inactivité, le jeton expirera.
Je ne veux pas utiliser de jetons d'actualisation avec état. Un temporisateur du côté du client finirait par supprimer le jeton dès qu'il expirera.
Suis-je en train de manquer un défaut majeur avec cette approche? (sauf les impacts évidents sur les performances dus aux accès DB plus fréquents)
Les JWT sont des jetons auto-décrivant dont l'intégrité est vérifiée. Ils ne sont pas conçus pour le cas d'utilisation que vous avez décrit. Les JWT ne peuvent pas expirer sur demande et leur validité ne peut pas être prolongée.
Ce que vous pouvez faire avec ces jetons, c'est émettre de nouveaux jetons, comme vous l'avez décrit. Cela n'invalidera pas les anciens. Vous finirez par générer de nombreux jetons qui expireront d'eux-mêmes.
Suis-je en train de manquer un défaut majeur avec cette approche?
Les JWT ne sont pas conçus pour une gestion de session complète. Ils viennent avec divers compromis. L'un d'eux est l'incapacité de les mettre à jour ou de les expirer à la demande. La solution de contournement que vous avez décrite fonctionne parfaitement. J'ai écrit un court article sur gestion de session , qui devrait vous aider à décider s'il faut faire des compromis.
À mon avis, vous devriez probablement passer au modèle de gestion de session "classique". Il prend en charge les délais d'inactivité et vous ne vous retrouverez pas non plus avec beaucoup de "sessions" (jetons).