it-swarm.com.de

Zeitablaufproblem in JWT

Wie Sie wissen, gibt es einige gute Gründe für die Verwendung von tokenbasierter Authentifizierung anstelle von sitzungsbasiert.

In der Sitzung gibt es natürlich eine Ablaufzeit. Wenn der Benutzer also längere Zeit nicht aktiv ist, läuft seine Sitzung ab. Wenn er jedoch eine Anforderung an den Server sendet, wird seine Zeit verlängert.

Es gibt ein tolles Tutorial hier über JWT. Ich habe eine Frage zu Ablaufzeit für Token . Stellen Sie sich vor, wir setzen die Ablaufzeit auf 100 Sekunden, dann unterschreiben wir das Token. Es spielt keine Rolle, ob der Benutzer aktiv ist oder nicht. Nach 100 Sekunden ist dieses Token nicht mehr gültig . Dies stört den Benutzer. Gibt es eine Möglichkeit, die Zeit zu verlängern?

Ist es ein wahrer Ansatz, oder vielleicht habe ich einen Fehler? Irgendeine Idee?

4
Vahid Najafi

Wenn ich die Frage richtig verstehe, ist es ziemlich einfach, den Ablauf eines JWT-Tokens während der Erstellung zu ändern. 

Der Anspruch "exp" (Verfallszeit) gibt die Verfallszeit an An oder nach welcher die JWT NICHT zur Verarbeitung akzeptiert werden MUSS. Die Verarbeitung des "exp" -Anspruchs erfordert, dass das aktuelle Datum/die aktuelle Uhrzeit Vor dem im "exp" -Anspruch angegebenen Verfallsdatum liegen muss.

Weitere Informationen finden Sie hier https://tools.ietf.org/html/rfc7519#section-4.1.4

Grundsätzlich benötigt die exp-Taste einen Unix-Zeitstempel. Setzen Sie den Zeitstempel jetzt auf> 100 Sekunden, um Ihr Ziel zu erreichen.

Um das Token "zu aktualisieren", benötigt Ihre API einen Dienst, der eine gültige JWT empfängt und dieselbe signierte JWT mit dem aktualisierten Ablauf zurückgibt. 

3
Maxwelll

Sie haben keine weiteren Informationen gegeben, aber ich gehe davon aus, dass Sie JWT für die Webbrowser-Authentifizierung verwenden werden. Sie können Ihr JWT mit einem httpOnly- und secure-Attribut in einem Cookie speichern und die Verfallszeit für Cookies ausreichend einstellen (vielleicht 1 Jahre) und setzen Sie innerhalb Ihrer JWT claims-Eigenschaft exp eine kürzere Zeit (vielleicht 1 Woche oder etwas anderes). Bei jeder Anfrage wird das Cookie an den Server gesendet, sodass Sie die Ablaufzeit überprüfen können.

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