Ich arbeite an einer Anwendung, wo Skalierbarkeit ein großes Anliegen ist. In der Vergangenheit habe ich Session-basierte Authentifizierung verwendet, entschied mich aber dieses Mal mit einem zustandslosen Server zu gehen, um horizontale Skalierung zu erleichtern.JWT, zustandslose Authentifizierung und Sicherheit
Ich bin kein Sicherheitsexperte, aber bei der Untersuchung von JWTs schien es, dass diese sehr unsicher sind. Der ganze Grund, warum wir Passwörter hacken, besteht darin, dass der Angreifer, wenn unsere Datenbank kompromittiert ist, nicht die Identität eines Benutzers annehmen kann. Mit JWT speichern wir ein Geheimnis auf dem Server. Wenn der Angreifer Zugriff auf das Geheimnis erhält, kann er sich nicht als ein beliebiger Benutzer ausgeben? Bedeutet dies nicht, dass die Verwendung von JWTs dasselbe Sicherheitsniveau wie das Speichern von Klartextpasswörtern hätte?
Ich habe gelesen, dass Leute reddis manchmal benutzen werden, um Referenz-JWTs zu kreuzen, aber dann ist der Server nicht zustandslos, und ich sehe den Vorteil der Verwendung von JWTs überhaupt nicht.
Könnte jemand helfen, dieses Problem für mich zu klären?
Der Server muss kein Geheimnis kennen, um das Token zu decodieren. Tokens sind Base64-codiert und können daher von jedem leicht entschlüsselt werden. Der Server benötigt nur den öffentlichen Schlüssel, um die Signatur zu validieren. – MvdD
@MvdD das ist interessant ... Ich bemerkte dies in einem [Knoten JWT] (https://github.com/auth0/node-jsonwebtoken) Paket, das Sie das Token decodieren könnten, indem Sie ihre API das Geheimnis oder einen öffentlichen Schlüssel übergeben . Aber alles, was ich lese (und andere Apis, die ich benutzt habe), scheint nicht über den öffentlichen Schlüssel zu sprechen. Bei einer weiteren Überprüfung sieht es so aus, als müssten Sie das Geheimnis bei der Verwendung von HMAC kennen, aber Sie können den öffentlichen Schlüssel verwenden, wenn Sie mit RSA oder ECDSA signieren (aus den Dokumenten des oben genannten Knotenpakets). –
Nicht alle Session-basierten Authentifizierungssysteme funktionieren auf die gleiche Weise. Einige speichern einen zufälligen Wert, der serverseitig bei jeder Anfrage überprüft wird. Dadurch können Token auf dem Server einfach widerrufen werden. Beachten Sie außerdem, dass nur JWTs, die im Browserspeicher gespeichert sind, Schutz vor CSRF bieten. Alle in Cookies gespeicherten Daten sind genauso anfällig. – SilverlightFox