TrendVidStream hat seinen gesamten Authentifizierungs-Stack auf ein System mit rotierenden Refresh-Tokens umgestellt, das ein gestohlenes Token in dem Moment erkennt, in dem es erneut verwendet wird. Die Änderung verwandelte ein 30 Tage gültiges JWT, das es einem Angreifer einst ermöglichte, sich ungehindert zu bewegen, in eine kurzlebige Anmeldeinformation, die sofort eine Sperrung auslöst.

Eine einzige Sicherheitslücke erzwang den Wechsel: Ein Partner-SDK speicherte ein 30 Tage gültiges JWT im Klartext zwischen. Ein Angreifer extrahierte es und spielte es aus einem anderen Land erneut ab. Das einzige Mittel war das Rotieren des Signierungsschlüssels – eine Operation, die alle Benutzer abgemeldet hat. Der Vorfall hat die Token-Sicherheit des Unternehmens neu gestaltet und bildet nun das Fundament für den Video-Streaming-Dienst.

Warum das alte Modell scheiterte

JWTs (JSON Web Tokens) sind eigenständige, signierte Blobs, die es einem Server ermöglichen, eine Anfrage ohne Datenbankabfrage zu verifizieren. Dieser Komfort hat seinen Preis: Wenn ein Token Wochen lang gültig ist, verschafft dessen Diebstahl einem Angreifer wochenlangen Zugriff. Bei der Sicherheitslücke blieb das gestohlene Token bis zu seinem 30-tägigen Ablaufdatum gültig, da es keine Möglichkeit gab, es vorzeitig ungültig zu machen.

Das Rotieren des Signierungsschlüssels ist der einzige globale Weg, um alle Token ungültig zu machen, aber es zwingt jeden Benutzer, sich erneut anzumelden, was den Dienst unterbricht und das Vertrauen untergräbt. Der Fehler lag nicht im JWT selbst, sondern im Vertrauen auf eine einzige, langlebige Anmeldeinformation.

Das neue Design kurz gefasst

TrendVidStream stellt nun zwei Arten von Tokens aus:

  • Access Tokens – gültig für 15 Minuten; sie enthalten die für jeden API-Aufruf erforderlichen Berechtigungen.
  • Refresh Tokens – Einmal-Tokens, die ein kurzlebiges Access Token gegen ein neues Paar austauschen.

Wenn ein Client ein Refresh Token vorlegt, führt der Server folgende Schritte aus:

  1. Verifiziert die Signatur und die Claims des Tokens.
  2. Prüft, ob das Token bereits verwendet wurde.
  3. Wenn die Prüfung erfolgreich ist, wird ein brandneues Refresh Token und ein frisches, 15 Minuten gültiges Access Token ausgestellt.
  4. Markiert das alte Refresh Token als verwendet.

Wenn Schritt 2 fehlschlägt – das heißt, dass dasselbe Token ein zweites Mal erscheint – behandelt der Server dies