Ich erstelle eine RESTful-API, die JWT-Token für die Benutzerauthentifizierung verwendet (ausgestellt von einem login
Endpunkt und anschließend in allen Headern gesendet). Die Token müssen nach einer festgelegten Zeitspanne aktualisiert werden (Aufrufen eines renew
Endpunkts, der ein erneutes Token zurückgibt) ).
Es ist möglich, dass die API-Sitzung eines Benutzers ungültig wird, bevor das Token abläuft. Daher überprüfen alle meine Endpunkte zunächst, ob: 1) das Token noch gültig ist und 2) die Sitzung des Benutzers noch gültig ist. Das Token kann nicht direkt ungültig gemacht werden, da es von den Clients lokal gespeichert wird.
Daher müssen alle meine Endpunkte meinen Kunden zwei mögliche Bedingungen mitteilen: 1) dass es Zeit ist, das Token zu erneuern, oder 2) dass die Sitzung ungültig geworden ist und sie nicht mehr auf das System zugreifen dürfen. Ich kann mir zwei Alternativen für meine Endpunkte vorstellen, um ihren Clients zu signalisieren, wenn eine der beiden Bedingungen eintritt (vorausgesetzt, die Clients können an beide Optionen angepasst werden):
- Geben Sie einen http 401-Code (nicht autorisiert) zurück, wenn die Sitzung ungültig geworden ist, oder geben Sie einen 412-Code zurück (Vorbedingung fehlgeschlagen), wenn das Token abgelaufen ist und es Zeit ist, den
renew
Endpunkt aufzurufen , der einen 200-Code (ok) zurückgibt. - Geben Sie 401 zurück, um zu signalisieren, dass entweder die Sitzung ungültig ist oder das Token abgelaufen ist. In diesem Fall ruft der Client sofort den
renew
Endpunkt auf. Wenn er 200 zurückgibt, wird das Token aktualisiert. Wennrenew
er aber auch 401 zurückgibt, bedeutet dies, dass der Client nicht im System ist.
Welche der beiden oben genannten Alternativen würden Sie empfehlen? Welches wäre standardmäßiger, einfacher zu verstehen und / oder ruhiger? Oder würden Sie einen ganz anderen Ansatz empfehlen? Sehen Sie bei beiden Optionen offensichtliche Probleme oder Sicherheitsrisiken? Zusätzliche Punkte, wenn Ihre Antwort externe Referenzen enthält, die Ihre Meinung stützen.
AKTUALISIEREN
Leute, bitte konzentriert euch auf die eigentliche Frage: Welche der beiden http-Code-Alternativen zur Signalisierung einer Erneuerung / Sitzungsinvalidierung ist die beste? Es macht nichts aus, dass mein System JWT- und serverseitige Sitzungen verwendet. Dies ist eine Besonderheit meiner API für sehr spezifische Geschäftsregeln und nicht für den Teil, für den ich Hilfe suche.