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.
authentication
oauth
youtube-api
access-token
refresh-token
Jason Axelrod
quelle
quelle
Antworten:
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 :
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 :
Weitere Informationen zu OAuth 2.0 Flow finden Sie in den folgenden Referenzen:
quelle
@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. Dannaccess_token
kann nur in einem schnellen, temporären Speicher (wie Speicher) gespeichert werden. Es ermöglicht auch die Autorisierung und die Trennung von Ressourcenservern.quelle
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.
quelle
"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.
quelle