Meine Web-Anwendung besteht aus vielen Ajax-Aufrufe an Server-Seite RESTful APIs
. Jedes Mal, wenn sich ein Kunde auf meiner Website anmeldet, erhält die Anmeldeseite ein JWT
(JSON Web Token) Token vom Server und speichert es als cookie
auf der Clientseite. (Ich beschließe, es als Cookie zu speichern, da es die einzige Möglichkeit ist, den Browser es automatisch senden zu lassen, und es wird gesagt, dass es sicherer als HTML5 Web Storage ist). Es gibt ein Feld im Token, das das Ablaufdatum des Tokens beschreibt. Für jeden Ajax-Aufruf wird das Token zur Authentifizierung gesendet.Wie wird Anmeldetagablauf für einen Ajax-Anruf elegant behandelt?
Wenn Client lange auf meiner Seite bleibt, kann das Token ablaufen. Und der Server wird es erkennen, wenn der Client die nächste HTTP-Anfrage macht (nicht nur REST-Anruf). Ich benutze servlet filter
, um HTTP-Anfragen all
abzufangen und das Token auf Ablauf zu überprüfen. Wenn das Token abgelaufen ist, wird eine Umleitung zur Anmeldeseite gesendet.
Aber es gibt ein Problem über den oben genannten Ansatz: "Wie man die Umleitung-zur-Login-Seite Antwort auf Client-Seite elegant behandelt?"
Für
non-Ajax
entstand HTTP-Anforderung, kann ich auf Browser verlassen, um die Umleitung zu Login-Seite Antwort und machen Seiten automatisch zu handhaben.Für
Ajax
HTTP-Anforderung entstanden, es scheint, dass ichcompletion handler
zusätzliche Logik zueach
Ajax-Aufruf des hinzufügen müssen, um die Umleitung zu Login-Seite Antwort zu erkennen undimperatively
die Seiten machen.
Oder bin ich total auf einem falschen Weg?
Einige Refs:
JWT (JSON Web Token) automatic prolongation of expiration
Which authentication strategy should I use for my API?
Implicit & Explicit authentication
ADD 1:
Es scheint der Browser die 302 redire wird Griff ction transparent. Also vielleicht kann ich einfach eine 302 Umleitung auf die Login-Seite zurückgeben, sei es für einen Ajax-Anruf oder einen einfachen Seitenbesuch. Ich werde versuchen und später antworten.
Von here:
Wenn die Antwort ein HTTP-Redirect (Statuscode 301, 302, 303 oder 307), dann muss es transparent verfolgt werden (es sei denn, es verletzt Sicherheit oder Endlosschleife Vorsichtsmaßnahmen) . Jeder andere Fehler (einschließlich einer 401) muss dazu führen, dass das Objekt diese Fehlerseite als Antwort verwendet.
Catching 302 FOUND in JavaScript
How to manage a redirect request after a jQuery Ajax call
hmm, ich wusste nicht, über das bis jetzt. Es scheint eine "HTTP-Konvention" zu geben. Danke vielmals! – smwikipedia
BTW, ist dies nicht zu sagen, dass ein Web-API, um eine 302-Antwort nie zurückkehren sollte. Wenn die Ressource tatsächlich verschoben wird, ist es vollkommen in Ordnung, 301 oder 302 zurückzugeben. Aber es sollte nicht verwendet werden, um einen Authentifizierungsmechanismus für Web-API-IMO zu implementieren. – MvdD
Ja. *Form folgt Funktion*. – smwikipedia