Das Aktualisierungstoken dient mindestens zwei Zwecken. Erstens ist das Aktualisierungstoken eine Art "Beweis", den ein OAuth2-Client bereits hat die Berechtigung des Benutzers zum Zugriff auf seine Daten erhalten hat und daher erneut ein neues Zugriffstoken anfordern kann, ohne dass der Benutzer den gesamten OAuth2-Fluss durchlaufen muss. Und zweitens trägt es dazu bei, den gesamten Sicherheitsfluss im Vergleich zu einem langlebigen Zugriffstoken zu erhöhen. Ich werde auf diese beiden Punkte etwas näher eingehen.
Aktualisieren Sie Token, um den Benutzer nicht zu stören
Lassen Sie uns mit einem Beispiel über den ersten Zweck sprechen. Angenommen, Sie als Nutzer verwenden eine Client-Webanwendung eines Drittanbieters, die mit Ihren YouTube-Kontodaten interagieren möchte. Wenn Sie der Client-Anwendung die Berechtigung zur Verwendung Ihrer YouTube-Daten erteilen, möchten Sie, dass die Client-App Sie zur Eingabe Ihrer Berechtigung auffordert erneut auffordertWann ist das YouTube-Token abgelaufen? Was passiert, wenn die Ablaufzeit des YouTube-Tokens sehr niedrig war, z. B. 5 Minuten? Es wäre etwas ärgerlich, wenn die Client-Anwendung Sie mindestens alle 5 Minuten um Ihre Erlaubnis bittet! Die Lösung, die OAuth2 für dieses 'Problem' vorschlägt, sind Aktualisierungstoken. Durch die Verwendung von Aktualisierungstoken kann das Zugriffstoken nur von kurzer Dauer sein (was wünschenswert ist, wenn das Zugriffstoken durchgesickert oder gestohlen wird), und das Aktualisierungstoken kann lange (er) langlebig bleiben, sodass der Client einen neuen Zugriff erhalten kann Token, wenn man abläuft, ohne die Erlaubnis des Benutzers zu benötigen (erneut).
Aber warum ein Aktualisierungstoken? Wenn es darum geht, den Benutzer nicht mit Berechtigungsanforderungen zu nerven, warum kann der Client dann nicht einfach sagen: "Hey, Autorisierungsserver, ich möchte ein weiteres Zugriffstoken. Jetzt!"? Oder: "Hey Authorization Server, hier ist mein abgelaufenes Token, gib mir ein neues!". Nun, das Aktualisierungstoken dient als eine Art "Beweis" dafür, dass dem Client zu einem ursprünglichen Zeitpunkt von einem Benutzer Zugriff gewährt wurde. Dieser "Beweis" besteht aus dem Aktualisierungstoken, das vom Autorisierungsserver digital signiert wird. Indem der Client ein Aktualisierungstoken vorlegt, kann der Autorisierungsserver überprüfen, ob der Client zu einem früheren Zeitpunkt die Berechtigung des Benutzers erhalten hat, und der Client muss den Benutzer nicht erneut auffordern.
Token aktualisieren, um die Sicherheit zu erhöhen
Dies wirft jedoch die Frage auf: "Nun, was passiert, wenn das Aktualisierungstoken durchgesickert oder gestohlen wird oder einfach von einer böswilligen Clientanwendung aufbewahrt wird, die es auf Anforderung des Benutzers nicht entfernt? Kann der Angreifer nicht einfach weitermachen?" Verwenden Sie das Aktualisierungstoken, um ein gültiges Zugriffstoken auf unbestimmte Zeit (oder bis es abläuft) zu erhalten. Diese Frage führt zur Erörterung des zweiten von mir erwähnten Zwecks, dass Aktualisierungstoken zu einem sichereren Fluss beitragen.
Das Problem bei Zugriffstoken besteht darin, dass sie nach dem Erwerb immer nur dem Ressourcenserver (z. B. YouTube) angezeigt werden. Wenn ein Zugriffstoken gestohlen oder kompromittiert wird, wie können Sie den Ressourcenserver anweisen, diesem Token nicht zu vertrauen? Das kannst du nicht wirklich. Die einzige Möglichkeit besteht darin, den privaten Signaturschlüssel auf dem Autorisierungsserver zu ändern (den Schlüssel, der das Token überhaupt signiert hat). Ich stelle mir vor, dass dies unpraktisch ist und in einigen Fällen (wie Auth0) nicht unterstützt wird.
Auf der anderen Seite müssen Aktualisierungstoken häufig dem Autorisierungsserver vorgelegt werden. Wenn also eine gefährdet ist, ist es trivial, das Aktualisierungstoken als Ganzes zu widerrufen oder zu verweigern und keine Signaturschlüssel zu ändern.