Ich habe einige REST-APIs mit Spring erstellt und Spring Security mit JWT zur Authentifizierung implementiert. Mein Frontend führt AngularJs aus und konsumiert diese Rest-APIs, die JSON-Antworten empfangen. Die JWT-Authentifizierung funktioniert einwandfrei, ermöglicht jedoch das einfache Kopieren und Einfügen von Anforderungsparametern und Headern aus der Browserkonsole in Postman oder einen anderen REST-Client, um erfolgreiche Antworten auch von geschützten APIs vom Back-End abzurufen.Wie kann man JTI-Ansprüche mit JWT richtig nutzen, um Replay-Attacken zu verhindern?
Ich versuche, dieses Problem zu lösen, indem ich JTI-Ansprüche innerhalb der JWT verwende. Ich plane, für jede Anfrage nach der Authentifizierung einen eindeutigen JTI-Wert zu verwenden, so dass das bloße Stehlen von Kopfzeilen aus dem Browser nicht funktionieren würde.
Jetzt, nachdem ich viele online verfügbare Ressourcen durchgegangen bin, ist mir immer noch nicht klar, ob der Client oder der Server den JTI-Wert in der JWT setzen soll.
Nach meinem Verständnis, wenn ich dies auf der Serverseite tun, muss ich eine neue JWT mit jeder Antwort senden und erwarte es in der nächsten Anfrage vom Client unter Beibehaltung einer Aufzeichnung der verwendeten JTIs in einer Datenbank. Aber wenn ein Angreifer dies herausfindet, muss er nur ein Token aus einer früheren Anfrage verwenden und danach bequem mit meinen APIs interagieren.
Wenn ich dies auf der Client-Seite mache, muss ich den geheimen Signaturschlüssel des JWT und die Logik für die JTI-Generierung im JavaScript-Code behalten, damit er einen JTI-Wert und einen Hash anhängen kann das Token wieder. Meine Fragen sind dann:
- Was ist die richtige Art, dies zu implementieren? Vermische ich etwas oder gehe in die falsche Richtung?
- Gibt es eine andere Lösung, die ich implementieren kann, um alle Anfragen von einem Nicht-Browser-Client zu verbieten oder nicht zu authentifizieren (wie es in älteren Spring MVC-Anwendungen mit Jsps passiert)?
Jede Hilfe wird sehr geschätzt. Ich bin jetzt schon lange darauf festgefahren.
Ich denke, Sie möchten Ihren Client gegen CSRF sichern, also würde ich diesen Link für weitere Lektüre vorschlagen: https://stormpath.com/blog/csrf-protection-jwt-spring-security – BeWu