Diese Antwort wurde mit Hilfe von zwei erfahrenen Entwicklern (John Brayton und David Jennes) zusammengestellt.
Der Hauptgrund für die Verwendung eines Aktualisierungstokens besteht darin, die Angriffsfläche zu verringern.
Nehmen wir an, es gibt keinen Aktualisierungsschlüssel und gehen wir dieses Beispiel durch:
Ein Gebäude hat 80 Türen. Alle Türen werden mit demselben Schlüssel geöffnet. Der Schlüssel wechselt alle 30 Minuten. Am Ende der 30 Minuten muss ich dem Schlüsselmacher den alten Schlüssel geben und einen neuen Schlüssel bekommen.
Wenn ich der Hacker bin und Ihren Schlüssel bekomme, werde ich ihn am Ende der 30 Minuten an den Schlüsselmacher weiterleiten und einen neuen Schlüssel bekommen. Ich kann alle Türen unabhängig vom Schlüsselwechsel kontinuierlich öffnen.
Frage: Wie viele Hacking-Möglichkeiten hatte ich in den 30 Minuten gegen den Schlüssel? Ich hatte jedes Mal 80 Hacking-Möglichkeiten, wenn Sie den Schlüssel verwendeten (stellen Sie sich vor, Sie stellen eine Netzwerkanforderung und übergeben das Zugriffstoken, um sich zu identifizieren). Das ist also eine 80-fache Angriffsfläche.
Lassen Sie uns nun dasselbe Beispiel durchgehen, aber dieses Mal nehmen wir an, dass es einen Aktualisierungsschlüssel gibt.
Ein Gebäude hat 80 Türen. Alle Türen werden mit demselben Schlüssel geöffnet. Der Schlüssel wechselt alle 30 Minuten. Um einen neuen Schlüssel zu erhalten, kann ich das alte Zugriffstoken nicht übergeben. Ich muss nur den Aktualisierungsschlüssel übergeben.
Wenn ich der Hacker bin und Ihren Schlüssel bekomme, kann ich ihn 30 Minuten lang verwenden, aber am Ende der 30 Minuten hat das Senden an den Schlüsselmacher keinen Wert. Wenn ich das tue, würde der Schlüsselmacher nur dieses schlechte Aktualisierungstoken sagen. Um meinen Hack verlängern zu können, müsste ich den Kurier zum Keymaker hacken. Der Kurier hat einen eindeutigen Schlüssel (stellen Sie sich dies als Aktualisierungstoken vor).
Frage: Wie viele Hacking-Möglichkeiten hatte ich in den 30 Minuten gegen den Aktualisierungsschlüssel? 80? Nein, ich hatte nur 1 Hacking-Gelegenheit. Während der Zeit kommuniziert der Kurier mit dem Schlüsselmacher. Das ist also 1X Angriffsfläche. Ich hatte 80 Hacking-Möglichkeiten gegen den Schlüssel, aber nach 30 Minuten sind sie nicht mehr gut.
Ein Server würde ein Zugriffstoken basierend auf Anmeldeinformationen und dem Signieren (normalerweise) eines JWT überprüfen.
Ein undichtes Zugriffstoken ist schlecht, aber sobald es abläuft, ist es für einen Angreifer nicht mehr nützlich. Ein Leck des Aktualisierungs-Tokens ist weitaus schlimmer, aber vermutlich weniger wahrscheinlich. (Ich denke, es gibt Raum zu hinterfragen, ob die Wahrscheinlichkeit eines Lecks eines Aktualisierungstokens viel geringer ist als die eines Lecks eines Zugriffstokens, aber das ist die Idee.)
Der Punkt ist, dass das Zugriffstoken zu jeder von Ihnen gestellten Anforderung hinzugefügt wird, während ein Aktualisierungstoken nur während des Aktualisierungsflusses verwendet wird. Daher ist die Wahrscheinlichkeit geringer, dass ein MITM das Token sieht
Frequenz hilft einem Angreifer. Herzblut ähnliche potenzielle Sicherheitslücken in SSL, potenzielle Sicherheitslücken im Client und potenzielle Sicherheitslücken im Server ermöglichen Leckagen.
Wenn der Autorisierungsserver vom Anwendungsserver getrennt ist, der andere Clientanforderungen verarbeitet, werden auf diesem Anwendungsserver keine Aktualisierungstoken angezeigt. Es werden nur Zugriffstoken angezeigt, die nicht mehr lange leben.
Die Unterteilung ist gut für die Sicherheit.
Last but not least sehen Sie diese tolle Antwort
Um welches Aktualisierungstoken geht es NICHT?
Die Möglichkeit, die Zugriffsebene über Aktualisierungstoken zu aktualisieren / zu widerrufen, ist ein Nebenprodukt der Auswahl von Aktualisierungstoken. Andernfalls kann ein eigenständiges Zugriffstoken widerrufen oder seine Zugriffsebene geändert werden, wenn es abläuft und Benutzer ein neues Token erhalten