2016-12-09 2 views
2

Ich fange an einer einzigen Seite Anwendung, und ich bin mit Javascript Web Tokens Client-Seite (JS-Client mit Server API) authentisieren.Einzel Seite Anwendung JWT, Token erfrischend vs langlebiges Token

In meiner App, Benutzer bieten Anmeldeinformationen (App-Auth, facebook, google) und dann Server prüft, ob Benutzer Existenz und gibt ein Token.

Client-JS fügt Token auf jede Anforderung, um den Server-API zu verwenden.

Wenn Token ausgegeben wird, hat es eine Ablaufzeit und eine maximale Aktualisierungszeit. Wenn eine kurze Ablaufzeit für das Token und eine "gute" maximale Aktualisierungszeit gesetzt wird, muss ich wissen, wann Token aktualisiert werden müssen. Der beste Ansatz, den ich bisher gefunden habe, besteht darin, den Client zu überprüfen, wenn der Token abgelaufen ist (5 Minuten vorher) und dann eine Aktualisierungsanfrage zu stellen. Dann würde ich ein neues Token bekommen. Dies könnte durchgeführt werden, bis die maximale Aktualisierungszeit erreicht ist. Dann sollte sich der Benutzer erneut authentifizieren müssen.

Ein weiterer Ansatz, den ich gesehen habe, ist, dass auf dem Server, wenn Token fast oder hat gerade abgelaufen ist, wird es autorefreshed und zurück an den Client (das Token-Änderung zu erfassen hat und speichern sie)

Aber .. Was ist der Unterschied zwischen diesem und einem einzelnen Token, um die "gute" Zeit zu verbringen?

Ist mit einer kurzlebigen Token, das ohne Auth Tonnen mal erneuert werden kann, besser als eine einzige lange Token zu haben?

Antwort

0

Der Hauptgrund für die Verwendung eines kurzlebigen Tokens besteht darin, sich gegen session hijacking zu verteidigen, wenn ein Angreifer über die eine oder andere Methode Sitzungsdaten stiehlt (in diesem Fall das Token) und böswillig in der Sitzung des Opfers handelt. Je kürzer der Token, desto weniger Zeit muss der Angreifer für die von ihm geplanten bösartigen Aktivitäten aufwenden.

+0

Ich weiß, dass, aber wenn Token Auto aufgefrischt wird, 1 Token stehlen bedeutet es max Aktualisierungszeit autorefreshed bis zu haben, ist so mehr oder weniger die gleichen wie lange man hat, ist es nicht? – vegetable

+1

Was meinst du mit automatisch aktualisiert, genau? Das Standardmodell besteht darin, ein Aktualisierungstoken mit dem ursprünglichen Zugriffstoken zu senden, das für ein einzelnes neues Token eingelöst werden kann. Es sollte nicht bei jeder Anfrage gesendet werden. Wenn ein Benutzer versucht, eine Verbindung mit einem abgelaufenen Zugriffstoken herzustellen, fordert der Server das Aktualisierungstoken an (oder der Client, der weiß, dass das Token abgelaufen ist, führt eine Aktualisierungsanforderung durch). Wenn der Client es nicht hat, werden sie aufgefordert, sich anzumelden. Sobald sie sich angemeldet haben, werden alle vorhandenen Aktualisierungs- und Zugriffstokens ungültig gemacht, um durch das neue Paar, das vom Server gesendet wurde, ersetzt zu werden. –

+1

Der Schlüssel besteht darin, dass die Verwendung eines Aktualisierungstokens alle vorhandenen Zugriffstoken ungültig machen sollte * und * das Aktualisierungstoken. Wenn also ein Aktualisierungstoken gestohlen wird und ein Angreifer es verwendet, um ein neues Aktualisierungstoken und Zugriffstoken zu erhalten, wird der Benutzer aufgefordert, sich bei seiner nächsten Anfrage anzumelden, da seine Token jetzt ungültig sind. Diese Anmeldung wird, wie oben erwähnt, ein neues Token-Paar erstellen und das vom Angreifer gewonnene Token-Paar ungültig machen. –