2015-12-17 9 views
11

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 ich completion handler zusätzliche Logik zu each Ajax-Aufruf des hinzufügen müssen, um die Umleitung zu Login-Seite Antwort zu erkennen und imperatively 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

Antwort

2

Ja, ich glaube, Sie haben Recht.

Für nicht-ajax, können Sie es im Serve-Ende mit Redirect behandeln.

Für ajax können Sie die Seite abhängig vom Ajax-Ergebnis wechseln.

9

Aus genau diesem Grund sollten Web-APIs nicht mit 302 redirect antworten, aber mit , wenn das Token abgelaufen ist.

Web-Anwendungen sollten 302 Antworten zurückgeben, da sie immer von Browser wie Mittel verbraucht werden sollen. Für weitere Informationen siehe auch my answer here.

+0

hmm, ich wusste nicht, über das bis jetzt. Es scheint eine "HTTP-Konvention" zu geben. Danke vielmals! – smwikipedia

+1

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

+0

Ja. *Form folgt Funktion*. – smwikipedia

2

A 302-Umleitung wird nicht für eine Javascript arbeiten (Ajax) nennen es wird einfach die neue Seite aufrufen aus JavaScript und nicht dem tatsächlichen Browser.

Die saubere Lösung ist, ein json Objekt mit einer Fehlermeldung zurück, und entweder die Fehlermeldung angezeigt wird. oder dann mit Hilfe von Javascript die Position auf die Login-Seite ändern

1

Sie ein Global Ajax Event Handler für den Umgang mit Sitzungsablauf im Allgemeinen verwenden können.

versuchen, die .ajaxError(), zu fangen und dann prüfen, ob sich eine Sitzung Ablauf oder etwas anderes, und sich entsprechend verhalten.

Ich habe nicht versuchen, dies ehrlich zu sein, aber es einen Versuch wert.

Verwandte Themen