Was ist Refresh-Token-Rotation und warum ist sie wichtig?
Tauchen wir ein und besprechen wir, warum die Refresh-Token-Rotation eine effektive Methode ist, um die Sicherheit deiner Refresh-Tokens zu schützen.
Was ist ein Refresh-Token?
Ein Refresh-Token ist eine spezielle Art von Token, das verwendet wird, um ein neues Zugriffstoken zu erhalten, wenn das aktuelle Zugriffstoken abläuft. Lies unseren vorherigen Beitrag Verständnis von Tokens in OIDC, um mehr zu erfahren.
Während der Einleitung haben wir auch erwähnt, dass wir bei Logto standardmäßig einen „Refresh-Token-Rotation“-Mechanismus implementiert haben, um die Sicherheit deines Refresh-Tokens zu schützen.
Aber was genau ist „Refresh-Token-Rotation“? Wie profitieren unsere Endbenutzer davon? Lass uns eintauchen!
Was ist Refresh-Token-Rotation?
Refresh-Token-Rotation ist ein Mechanismus, der das vorherige Refresh-Token ungültig macht und ein neues ausstellt, wenn das Refresh-Token verwendet wird, um ein neues Zugriffstoken zu erhalten. Dieser Mechanismus stellt sicher, dass das Refresh-Token erneuert wird, bevor es abläuft.
Warum brauchen wir Refresh-Token-Rotation?
Refresh-Tokens haben eine längere Lebensdauer, in der Regel Wochen oder sogar Monate. Und da wir mit einem Refresh-Token neue Zugriffstokens erhalten können, wird das Refresh-Token auch ein attraktives Ziel für Angreifer. Daher muss der Autorisierungsserver gemäß dem OAuth 2.0 BCP eine der folgenden Maßnahmen ergreifen, um solche Angriffe zu verhindern.
- Ausgabe von senderbeschränkten Refresh-Tokens: Der Client signiert und stellt eine Signatur (
Sec-Token-Binding
) im Header der Refresh-Anforderung bereit, sodass das ausgestellte Refresh-Token kryptografisch an einen bestimmten Client gebunden ist. Heute sind jedoch nur einige der nativen Clients senderbeschränkt, und die meisten modernen SPAs und mobilen Clients sind öffentlich. - Refresh-Token-Rotation: Der Autorisierungsserver stellt ein neues Refresh-Token aus (typischerweise beim Austausch gegen ein neues Zugriffstoken) und macht das vorherige ungültig. Dies mindert das Risiko eines Token-Lecks.
Best Practices zur Implementierung der Refresh-Token-Rotation
Bei Logto wird, wenn ein Benutzer erfolgreich angemeldet ist, zuerst ein Grant
-Objekt in der Datenbank erstellt, und das daraufhin ausgestellte Refresh-Token verfügt über eine Referenz grantId
und zeigt auf das allererste Grant-Objekt.
Immer wenn eine Refresh-Token-Rotation stattfindet, wird das vorherige Refresh-Token als verbraucht markiert, und der Logto-Autorisierungsserver stellt ein neues Refresh-Token mit derselben grantId
aus.
Angenommen, das vorherige Refresh-Token ist durchgesickert, dann hätte entweder der legitime Client oder der Angreifer es verwendet, um ein Zugriffstoken auszutauschen. Und egal wer das getan hat, das durchgesickerte Refresh-Token muss bereits rotiert und als verbraucht markiert worden sein. Einer von ihnen, der das verbrauchte Refresh-Token als Zweites verwendet, wird den Autorisierungsserver über den Bruch informieren. Der Autorisierungsserver wird alle Refresh-Tokens mit derselben grantId
widerrufen.
Im obigen Fall kann der legitime Client nach dem Auslösen des Alarms nur erneut durch den Anmeldeablauf authentifiziert werden, um ein neues Refresh-Token zu erhalten. Der Angreifer hingegen wird die Kontrolle über dein System verlieren und ausgeschlossen werden.
Wann passiert die Refresh-Token-Rotation?
Bei Logto definiert das Standardverhalten einer Refresh-Token-Rotation:
- Wenn der Client senderbeschränkt oder nicht öffentlich ist (z. B. serverseitig gerenderte Webanwendungen), erfolgt die Refresh-Token-Rotation, wenn sie 70 % ihrer gesamten Lebensdauer (TTL) erreicht hat.
- Wenn der Client ein öffentlicher Client ist (z. B. Webanwendungen mit einer einzigen Seite), erfolgt die Refresh-Token-Rotation jedes Mal, wenn es verwendet wird, um ein Zugriffstoken auszutauschen. Die Token-Austausch-Antwort wird sowohl ein neues Zugriffstoken als auch ein neues Refresh-Token zurückgeben.
Wie kann ich die Refresh-Token-Rotation in Logto aktivieren/deaktivieren?
Gehe in der Logto-Admin-Konsole zu Admin-Konsole > Anwendungen und wähle die Anwendung aus, bei der du die Refresh-Token-Rotation umschalten möchtest. Auf der Anwendungsdetailseite gehst du zum Reiter „Erweiterte Einstellungen“ und scrollst nach unten, dort findest du den Schalter zusammen mit einigen anderen nützlichen Einstellungen.
Wenn du den Schalter ausschaltest, wird dein Refresh-Token nie rotiert, bis es abläuft. Daher empfehlen wir dringend, die Refresh-Token-Rotation immer zu aktivieren.
Zusammenfassung: Was ist Refresh-Token-Rotation und warum ist sie wichtig?
Refresh-Token-Rotation ist eine Best Practice, die die Sicherheit des Refresh-Tokens in deiner Anwendung gewährleistet. Sie macht das vorherige Refresh-Token ungültig und stellt ein neues aus, wenn das Refresh-Token verwendet wird, um ein neues Zugriffstoken zu erhalten. Dieser Mechanismus mindert das Risiko eines Token-Lecks und stellt die Sicherheit deines Refresh-Tokens sicher.
Logto folgt branchenführenden Best Practices und stellt die Benutzersicherheit immer an oberste Stelle.
Ich hoffe, dieser Blog erklärt gut deine Zweifel zum Mechanismus der Refresh-Token-Rotation. Lass uns wissen, wenn noch etwas unklar ist. Deine Rückmeldungen und Vorschläge sind immer willkommen!
Probiere Logto heute aus und erlebe ein sichereres Authentifizierungserlebnis.