2016-08-30 1 views
0

Hier ist, was Struktur wieausloggen eine stateless app

aussehen mein Projekt ist
  • UI: AngularJS App
  • Backend: Java + MongoDB staatenlos app

Die UI authentifiziert einen bestimmten Benutzer und die REST API antwortet mit einem JWT-Token. Für jede weitere Anfrage erwartet die REST API Token im Header und wenn sie nicht da ist, gibt sie Unautorized Fehler zurück.

Nun, was ist der beste Weg zur Implementierung logoff Funktion? Eine Sache ist klar, dass ich das Token aus dem UI-Cookie löschen werde. Aber ich muss dem Server mitteilen, dass sich der Benutzer ausgeloggt hat.

Ich dachte, eine In-Memory-DB zu halten, um zu verfolgen, wer sich angemeldet hat und den Benutzer aus dem Speicher zu entfernen, sobald er ausgeloggt ist, aber es würde die App eine Art von Stateful (ich denke). Außerdem könnte es schwierig werden, die App zu skalieren, da ich die In-Memory-Benutzer über alle Knoten hinweg replizieren müsste.

Für jeden REST-Aufruf hole ich die Benutzerdetails aus MongoDB. Wäre es sinnvoll, mit der DB den eingeloggten Status zu speichern? Ich denke nur laut nach. Da ich nicht weiß, in welche Richtung ich gehen soll.

+0

* "Aber ich muss dem Server mitteilen, dass sich der Benutzer abgemeldet hat." * Warum? Wie auch immer, machen Sie einfach einen Logout-Endpunkt, der das Token aus dem Backend löscht. –

+0

* Warum * Damit der Server weiß, dass jede nachfolgende Anfrage Anmeldeinformationen benötigt. Wie ich bereits erwähnt habe, wenn ich dies nicht tue und der Token von jemandem gestohlen wurde, kann er weiterhin die Anfrage senden, obwohl der Client abgemeldet wurde. * Einen Abmelde-Endpunkt zu machen * würde die Bedenken aufwerfen, die ich in meinem vorletzten Punkt, d. H. Skalierbarkeit, erwähnt habe. –

+0

Ich glaube nicht, dass es einen Leistungsunterschied zwischen dem Speichern eines eingeloggten Status in Ihrer DB und dem Löschen des ungültigen Tokens von Ihrem DB –

Antwort

1

Wenn Sie JWTs verwenden, um Sitzungen clientseitig zu verwalten, sollte der Server kein Konzept der angemeldeten und abgemeldeten Benutzer haben.

Dies ist der Preis, den Sie zahlen, wenn Sie sich für die Verwendung von JWT entscheiden (was natürlich gut ist, abhängig von Ihrer Risikobereitschaft für die Anwendung).

Wenn Sie Benutzer serverseitig protokollieren möchten, sollten Sie das JWT-Modell verwerfen und serverseitige Sitzungen aufzeichnen. Auf diese Weise können Sie den Server-seitigen Datensatz sowie das Cookie beim Abmelden löschen.