Was ist der Zweck eines "Refresh Token"?


96

Ich habe ein Programm, das in die YouTube Live Streaming API integriert ist. Es läuft auf Timern, daher war es für mich relativ einfach, alle 50 Minuten ein neues Zugriffstoken mit einem Aktualisierungstoken abzurufen. Meine Frage ist, warum?

Als ich mich bei YouTube authentifizierte, gab es mir ein Aktualisierungstoken. Ich verwende dieses Aktualisierungstoken dann, um ungefähr einmal pro Stunde ein neues Zugriffstoken zu erhalten. Wenn ich das Aktualisierungstoken habe, kann ich es IMMER verwenden, um ein neues Zugriffstoken zu erhalten, da es nie abläuft. Ich sehe also nicht, wie dies sicherer ist, als mir von Anfang an nur ein Zugriffstoken zu geben und mich nicht um das gesamte Refresh-Token-System zu kümmern.



1
Zugriffstoken sind Inhaber- Token. Das bedeutet, dass keine andere Identifikation erforderlich ist und das Zugriffstoken alles ist, was erforderlich ist, um sich als Sie auszugeben. Aus diesem Grund sollten sie immer von kurzer Dauer bleiben. Auf der anderen Seite sind Aktualisierungstoken keine Inhaber- Token. Wenn du ein Aktualisierungstoken an YouTube sendest, um ein neues Zugriffstoken zu erhalten, musst du auch eine client_id und client_secret senden. Aus diesem Grund kann das Aktualisierungstoken eine längere Lebensdauer haben, da es viel weniger wahrscheinlich ist, dass sowohl das Aktualisierungstoken als auch das client_secret gefährdet werden.
Jrahhali

Antworten:


90

Grundsätzlich werden Aktualisierungstoken verwendet, um neue Zugriffstoken zu erhalten.

Um diese beiden Token klar zu unterscheiden und Verwechslungen zu vermeiden, finden Sie hier ihre Funktionen im OAuth 2.0 Authorization Framework :

  • Zugriffstoken werden von einem Autorisierungsserver mit Genehmigung des Ressourcenbesitzers an Clients von Drittanbietern ausgegeben. Der Client verwendet das Zugriffstoken, um auf die geschützten Ressourcen zuzugreifen, die vom Ressourcenserver gehostet werden.
  • Aktualisierungstoken sind Anmeldeinformationen, mit denen Zugriffstoken abgerufen werden. Aktualisierungstoken werden vom Autorisierungsserver an den Client ausgegeben und werden verwendet, um ein neues Zugriffstoken zu erhalten, wenn das aktuelle Zugriffstoken ungültig wird oder abläuft, oder um zusätzliche Zugriffstoken mit identischem oder engerem Umfang zu erhalten.

Um Ihre Frage zu beantworten, warum Ihnen immer noch ein Aktualisierungstoken ausgestellt wurde, anstatt nur ein Zugriffstoken zu sichern, lautet der Hauptgrund, den die Internet Engineering Task Force für Aktualisierungstoken angibt :

Es gibt einen Sicherheitsgrund, der refresh_tokenimmer nur mit dem Autorisierungsserver ausgetauscht wird, während der access_tokenmit Ressourcenservern ausgetauscht wird. Dies verringert das Risiko, dass ein langlebiges access_token im "ein Zugriffstoken, das eine Stunde lang gültig ist, mit einem Aktualisierungstoken, das ein Jahr lang gültig oder bis zum Widerruf gültig ist" im Vergleich zu "einem Zugriffstoken, das bis zum Widerruf ohne Aktualisierung gültig ist" leckt Zeichen."

Weitere Informationen zu OAuth 2.0 Flow finden Sie in den folgenden Referenzen:


5
Sollte das Aktualisierungstoken auch dazu beitragen, ein neues Aktualisierungstoken zu erhalten?
Gherman

5
Warum nicht einfach ein neues kurzlebiges access_token erwerben, wenn es abläuft? Warum das langlebige refresh_token, wenn Sie den Server trotzdem nach einem neuen access_token fragen müssen? Oder ist es wahr, dass ich mit einem refresh_token kein lebendiges Identitätsanbieter-Cookie verwalten muss und neue access_tokens basierend auf dem refresh_token ausgibt, selbst nachdem das Cookie schon lange nicht mehr vorhanden ist und der Benutzer seine Anmeldeinformationen eingeben müsste, wenn er ein erhalten möchte neues access_token?
JustAMartin

2
@JustAMartin Als OAuth2-Client ohne Aktualisierungstoken müsste ich den gesamten Autorisierungsfluss erneut initiieren (den Benutzer dazu bringen, sich anzumelden und mir erneut Berechtigungen zu erteilen), um ein weiteres Zugriffstoken zu erhalten. Aktualisierungstoken umgehen diese Anforderung als eine Art "Beweis" dafür, dass ich als Client bereits die Erlaubnis des Benutzers erhalten habe, ein Zugriffstoken anzufordern.
Jrahhali

Kann ein Aktualisierungstoken identische oder dieselben Daten wie das Zugriffstoken haben? da die Hauptverwendung von Aktualisierungstoken darin besteht, die Benutzererfahrung zu vereinfachen und die Zugriffszeit von Hackern auf eine Ressource zu begrenzen.
DaviesTobi Alex

8

@Teyam SO-Beitrag erwähnen Warum hat OAuth v2 sowohl Zugriffs- als auch Aktualisierungstoken? aber ich bevorzuge die andere Antwort dort: https://stackoverflow.com/a/12885823/254109

TL; DR refresh_token bringt keine erhöhte Sicherheit. Es dient dem Zweck, die Skalierbarkeit und Leistung zu verbessern. Dann access_tokenkann nur in einem schnellen, temporären Speicher (wie Speicher) gespeichert werden. Es ermöglicht auch die Autorisierung und die Trennung von Ressourcenservern.


3
außer es gibt einen Sicherheitsgrund, wie von @Teyam erwähnt: "refresh_token wird immer nur mit dem Autorisierungsserver ausgetauscht, während das access_token mit Ressourcenservern ausgetauscht wird"
huyz

Dies ist nur dann sicherer, wenn wir davon ausgehen, dass der Autorisierungsserver irgendwie besser als der Ressourcenserver gesichert ist. Wenn dies nicht der Fall ist, ist es tatsächlich weniger sicher. Wenn das Aktualisierungstoken kompromittiert ist, kann ich es einfach verwenden, um ein neues Zugriffstoken zu erhalten.
Arno van Lieshout

6

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.


5

"Ich sehe also nicht, wie dies sicherer ist, als mir von Anfang an nur ein Zugriffstoken zu geben und mich nicht um das gesamte Refresh-Token-System zu kümmern." Ich kämpfte mit der gleichen Frage. Die kurze Antwort lautet: Das Aktualisierungstoken ist erforderlich, um sicherzustellen, dass die Anmeldeinformationen nicht abgelaufen sind.

Ein Beispiel kann helfen: Ich habe eine Datenbank, in der Ihre medizinischen Unterlagen gespeichert sind. Sie stimmen zu, Ihre medizinischen Unterlagen mit Ihrem Ehepartner zu teilen. Ihr Ehepartner verwendet sein Zugriffstoken, um Ihre Unterlagen aus meiner Datenbank zu lesen. In zwei Wochen überprüft Ihr Ehepartner erneut Ihre medizinischen Unterlagen und das Aktualisierungstoken wird verwendet, um sicherzustellen, dass er weiterhin über die Berechtigung (vom Authentifizierungsserver) verfügt, Ihre Unterlagen anzuzeigen. Das Aktualisierungstoken umgeht die Notwendigkeit, dass Ihr Ehepartner seine Anmeldeinformationen (Benutzername und Kennwort) erneut in den Authentifizierungsserver eingibt, stellt jedoch sicher, dass er weiterhin berechtigt ist, auf die Ressource zuzugreifen. Ein niemals ablaufendes Zugriffstoken würde nicht wissen, ob Sie die Rechte Ihres Ehepartners auf Ihre medizinischen Unterlagen widerrufen haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.