it-swarm.com.de

REST API-Sicherheit: HMAC / Key-Hashing gegen JWT

Ich habe gerade diesen Artikel gelesen das ist ein paar Jahre alt, beschreibt aber eine clevere Methode zum Sichern Ihrer REST APIs. Im Wesentlichen:

  • Jeder Client verfügt über ein eindeutiges öffentliches/privates Schlüsselpaar
  • Nur der Client und der Server kennen den privaten Schlüssel. es wird nie über den Draht gesendet
  • Bei jeder Anforderung nimmt der Client mehrere Eingaben (die gesamte Anforderung selbst, den aktuellen Zeitstempel und den privaten Schlüssel) und führt sie über eine HMAC-Funktion aus, um einen Hash der Anforderung zu erstellen
  • Der Client sendet dann die normale Anforderung (die den öffentlichen Schlüssel enthält) und den Hash an den Server
  • Der Server sucht nach dem privaten Schlüssel des Clients (basierend auf dem bereitgestellten öffentlichen Schlüssel) und führt eine Zeitstempelprüfung durch (die ich zugegebenermaßen nicht verstehe), um sicherzustellen, dass die Anforderung kein Opfer eines Wiederholungsangriffs ist
  • Wenn alles in Ordnung ist, verwendet der Server den privaten Schlüssel und dieselbe HMAC-Funktion, um einen eigenen Hash der Anforderung zu generieren
  • Der Server vergleicht dann beide Hashes (den vom Client gesendeten und den von ihm generierten). Wenn sie übereinstimmen, wird die Anforderung authentifiziert und kann fortgesetzt werden

Ich bin dann über JWT gestolpert, was sehr ähnlich klingt. Im ersten Artikel wird JWT jedoch überhaupt nicht erwähnt, und ich frage mich, ob und wie sich JWT von der oben genannten Authentifizierungslösung unterscheidet.

17
smeeb

Beginnen wir mit einer sehr einfachen Antwort.

JWT (wie im Kontext von OAuth und OpenID) verwendet) erfordert keine gemeinsamen Geheimnisse zwischen Client und API. Es gibt 3 Komponenten und Paare von 2 teilen sich jeweils ein Geheimnis: Client <-> Identifikationsserver , Identifikationsserver <-> API.

Dadurch wird die größte Komplexität von der API auf den Identifikationsserver übertragen. Die API muss lediglich überprüfen, ob das Token vom Identifikationsserver ausgestellt und nicht temperiert wurde. Um zu überprüfen, ob die API überprüft, ob die JWT-Signatur mit dem bekannten einzelnen gemeinsamen Geheimnis zwischen Identifikationsserver und API gültig ist. Das ist es!

Wie der Identifikationsserver die Benutzeridentität überprüft, kann sehr unterschiedlich sein (in vielen Fällen handelt es sich um das alte Paar aus Benutzername und Kennwort über eine TLS-Verbindung), hat jedoch keine Auswirkungen auf Ihre API.

Datenschutz und Sicherheit der Nachricht und des Tokens selbst bei Verwendung von JWT werden von TLS behandelt. JWT kennt solche Probleme nicht.

8
Patrick