it-swarm.com.de

JWT vs. Client-Zertifikate

Wir haben einen Transaktionsserver, mit dem verschiedene Clientanwendungen verbunden sind. Voraussetzung ist ein sicheres Authentifizierungsmittel für Clientanwendungen zur Kommunikation mit dem Transaktionsserver. Die beiden untersuchten Lösungen sind JWT- und Client-Zertifikate.

Was sind Ihrer Meinung nach die Vor- und Nachteile beider Optionen unter Sicherheits- und Effizienzgesichtspunkten? Mir ist klar, dass diese Frage etwas allgemein gehalten ist, und das liegt speziell daran, dass wir einige allgemeinere Ideen erhalten möchten, bevor wir zu einer bestimmten Lösung übergehen, da diese Komponenten noch in der Entwicklung sind.

Jeder Rat von denen, die beide Technologien verwendet haben, wäre dankbar!

12
Nixman55

Für ein wenig Kontext habe ich intensiv mit der JWT-Token-basierten Authentifizierung gearbeitet, aber wenig Erfahrung mit Client-Zertifikaten, sodass meine Antwort (Informationen und Meinungen) voreingenommen gegenüber JWT ist.

JWT Token Pros:

  • Kann leicht generiert (oder neu generiert) werden und kann Ablaufdaten/-zeiten enthalten, um den Schaden aufgrund eines gestohlenen JWT-Tokens zu verringern
  • Kann "Ansprüche" in die Nutzdaten aufnehmen, um zusätzliche Informationen zu übertragen, möglicherweise die Rolle des Clientgeräts oder buchstäblich jedes gewünschte Schlüssel-Wert-Paar
  • Einfach zu transportieren, da sie nach der Codierung nur eine Zeichenfolge sind
  • Die überwiegende Mehrheit der Sprachen verfügt über Bibliotheken, die die meisten Aufgaben übernehmen. Siehe: Bibliotheksseite

JWT Token Nachteile:

  • In der Regel benötigen Sie einen Authentifizierungsserver oder ein Modul auf Ihrem Transaktionsserver, um diese zu verteilen
  • Je nachdem, wie sich Ihr Client authentifizieren muss, können die Dinge sehr kompliziert oder unmöglich werden. Solange der Benutzer über Anmeldeinformationen verfügt, ist dies in Ordnung, da diese verwendet werden können, um den Client vor dem Senden des JWT-Tokens zunächst zu authentifizieren. Andernfalls benötigen Sie einige Mittel, um zunächst die Authentizität des Clients zu bestätigen

Kundenzertifikate Vorteile:

  • Erfordert die einmalige Installation eines einzelnen Zertifikats (zur Konfigurationszeit? Kommt nur darauf an)
  • Erfordert keinen serverseitigen Code, um Zertifikate auf dieselbe Weise wie JWT zu erstellen und zu verteilen

Client-Zertifikate Nachteile:

  • Wenn ein Zertifikat jemals kompromittiert wird, kann es für Angriffe im Wiedergabestil verwendet werden, solange es gültig ist (und nicht als kompromittiert erkannt wird, andernfalls könnte es auf die schwarze Liste gesetzt werden).
  • Erfordert einen sicheren permanenten Speicherpunkt auf dem Clientgerät. Im Gegensatz zu JWT-Token, die sicher im Speicher gespeichert und letztendlich beim Herunterfahren des Clients oder beim Schließen der Anwendung zerstört werden könnten, müsste das Zertifikat dauerhaft an einem sicheren Ort gespeichert werden. Je nachdem, was genau der Kunde ist, kann dies sehr schwierig oder unmöglich sein

Meine Meinung: JWT-Token sind eine sichere, standardisierte Methode zur Clientauthentifizierung, und ich würde sie empfehlen.

6
dFrancisco

Dies kann nicht beantwortet werden, ohne Ihre Umgebung besser zu verstehen.

  • Befindet sich dies alles in Ihrer eigenen Domain oder stellen diese externen Geräte eine Verbindung zu Ihrem Dienst her?
  • Benötigen diese Dienste unterschiedliche Berechtigungen?
  • Werden diese Dienste verwendet, um eine Benutzeridentität zu delegieren, die nachgelagert verwendet wird?
  • Wie kommunizieren diese Dienste miteinander? SICH AUSRUHEN? Binär?
  • Mit welchem ​​Tech-Stack arbeiten Sie?

Client-Zertifikate sind nützlich, um sich zu authentifizieren. Wenn Sie jedoch unterschiedliche Berechtigungen für Dienste benötigen, die auf Ihren eigenen Dienst zugreifen, hilft ein Client-Zertifikat allein nicht weiter. Wie oben erwähnt, müssen Sie die von Ihnen ausgestellten Zertifikate verwalten. Diese Einschränkung besteht jedoch bei JWTs, die ebenfalls signiert werden müssen. Wenn Sie mehrere Zertifikate für externe Geräte haben, werden Sie

JWTs sind nützlich, wenn die Verbraucher unterschiedliche Berechtigungen haben und über REST auf Ihren Dienst zugreifen. Wenn die Kommunikation nicht REST] ist, kümmern Sie sich nicht um JWTs. Sie müssen das Signaturzertifikat auch in JWTs verwalten. Wenn Sie JWTs verwenden, müssen Sie sich der Schwachstellen bewusst sein haben:

  • Algorithmusangriffe gegen Bibliotheken, die den Wert none berücksichtigen
  • JWT-Wiederholungsangriffe
  • JWTs erfordern TLS auf der Transportschicht
  • Bei einigen JWT-Frameworks können Sie das System angreifen, indem Sie die Algorithmus-Typen von RS256 auf HS256 umschalten und mit dem öffentlichen Schlüssel signieren

Es ist nichts Falsches an JWTs, wenn sie korrekt implementiert sind. Nur Leute können die JWT-Implementierung vermasseln. Ich bin voreingenommen, weil ich derzeit versuche, JWT-Muster in meiner eigenen Organisation zu beheben, die zu Sicherheitslücken führen, weil bei der Validierung Ablaufdaten ignoriert wurden ...

1
McMatty