Ich habe gerade diesen Artikel gelesen , der ein paar Jahre alt ist, aber eine clevere Methode zum Sichern Ihrer REST-APIs beschreibt. 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 das Kabel gesendet
- Bei jeder Anforderung verwendet 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 nicht Opfer einer Wiederholungsattacke 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 auf JWT gestoßen , was sich sehr ähnlich anhört. Im ersten Artikel wird JWT jedoch überhaupt nicht erwähnt, und daher frage ich mich, ob und wie JWT von der oben genannten Authentifizierungslösung abweicht.
Antworten:
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 2er-Paare, die jeweils ein Geheimnis teilen: Client <-> Identifikationsserver, Identifikationsserver <-> API.
Dadurch wird die meiste Komplexität von der API auf den Identifikationsserver verlagert. Die API muss lediglich überprüfen, ob das Token vom Identifikationsserver ausgestellt und nicht mit dem Temperament versehen wurde. Um zu überprüfen, ob die API die Gültigkeit der JWT-Signatur mit dem bekannten gemeinsamen Geheimnis zwischen Identifikationsserver und API überprüft. Das ist es!
Wie der Identifikationsserver die Benutzeridentität überprüft, kann sehr unterschiedlich sein (in vielen Fällen ist es 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 ist sich solcher Probleme nicht bewusst.
quelle