web-dev-qa-db-fra.com

Problème d'expiration de temps dans JWT

Comme vous le savez, il existe de bonnes raisons d'utiliser authentification basée sur un jeton au lieu d'une session.

En session, bien sûr, il y a un délai d'expiration. Donc, si l'utilisateur n'est pas actif pendant un moment, sa session est expirée. Mais avant d’expirer, s’il envoie une demande au serveur, son temps sera prolongé.

Il existe un tutoriel génial ici à propos de JWT. J'ai une question à propos de heure d'expiration du jeton . Imaginons que nous fixions le délai d'expiration à 100 secondes, puis que nous signions le jeton. Peu importe que l'utilisateur soit actif ou non. Après 100 secondes ce jeton ne sera plus valide . Cela dérange l'utilisateur. Y at-il un moyen de prolonger le temps?

Est-ce une approche vraie, ou peut-être que j'ai une erreur. Une idée?

4
Vahid Najafi

Si je comprends bien la question, il est assez simple de modifier l'expiration d'un jeton JWT lors de la création ... 

La revendication "exp" (heure d'expiration) identifie l'heure d'expiration le Ou après laquelle la JWT NE DOIT PAS être acceptée pour traitement. Le traitement De la demande "exp" nécessite que la date/heure actuelle DOIT être antérieure à la date/heure d'expiration indiquée dans la demande "exp".

Plus d'informations peuvent être trouvées ici https://tools.ietf.org/html/rfc7519#section-4.1.4

Fondamentalement, la clé exp prend un horodatage Unix - réglez-le sur> 100 secondes à partir de maintenant et vous atteindrez votre objectif.

Pour "actualiser" le jeton, votre API a besoin d'un service qui reçoit un JWT valide et renvoie le même JWT signé avec l'expiration mise à jour. 

3
Maxwelll

Vous n'avez pas fourni d'informations supplémentaires, mais je suppose que vous allez utiliser JWT pour l'authentification du navigateur Web. Vous pouvez enregistrer votre JWT dans un cookie avec les attributs httpOnly et secure et définir un délai d'expiration suffisamment long. (peut-être 1 ans) et à l'intérieur de votre JWT claims, définissez la propriété exp sur une durée plus courte (peut-être 1 semaine ou autre chose). à présent, dans chaque demande, le cookie sera envoyé au serveur afin que vous puissiez vérifier le délai d'expiration. quelque chose comme ceci:

if(decodedJwt.exp < Date.now()){
  //token is valid, do your stuff
}else {
  //token expired, regenerate it and set it to the cookie
  //also update the expire time of the cookie 
}
0
Shahin Soft