Kontaktiere uns

info@serverion.com

Rotation von Aktualisierungstoken: Best Practices für Entwickler

Rotation von Aktualisierungstoken: Best Practices für Entwickler

Möchten Sie Ihre App sicherer machen und gleichzeitig die Benutzerzufriedenheit aufrechterhalten? Die Rotation von Aktualisierungstoken kann Abhilfe schaffen. Dabei werden Aktualisierungstoken nach jeder Verwendung ersetzt, um sicherzustellen, dass sie nur einmalig gültig sind. Dies verbessert die Sicherheit, blockiert Replay-Angriffe und vereinfacht die Sitzungsverwaltung – und das alles, ohne das Benutzererlebnis zu beeinträchtigen.

Warum die Rotation von Aktualisierungstoken verwenden?

  • Stärkere Sicherheit: Begrenzt den Token-Missbrauch und bietet klare Aktivitätsprotokolle.
  • Bessere Kontrolle: Verwalten Sie Sitzungen präzise und widerrufen Sie den Zugriff bei Bedarf sofort.
  • Reibungslose Benutzererfahrung: Lange Sitzungen ohne häufige Anmeldungen.

So funktioniert es:

  1. Wenn ein Zugriffstoken abläuft, wird das Aktualisierungstoken verwendet, um ein neues anzufordern.
  2. Der Server gibt neue Zugriffs- und Aktualisierungstoken aus und macht dabei das alte Aktualisierungstoken ungültig.
  3. Dadurch entsteht eine sichere Token-Kette, wodurch Risiken wie Token-Diebstahl reduziert werden.

Wichtige Schritte zur Implementierung:

  • Legen Sie eine kurze Lebensdauer für Zugriffstoken fest (15–30 Minuten).
  • Verwenden Sie einmalige Aktualisierungstoken (gültig für 7–14 Tage).
  • Speichern Sie Token sicher (z. B. Nur-HTTP-Cookies oder sicherer serverseitiger Speicher).
  • Achten Sie auf verdächtige Aktivitäten wie die Wiederverwendung von Token oder ungewöhnliche Anmeldemuster.

Durch die Einführung der Aktualisierungstokenrotation erhöhen Sie die Sicherheit Ihrer App und gewährleisten gleichzeitig eine nahtlose Authentifizierung für Benutzer. Möchten Sie mehr erfahren? Dann legen wir los!

Erkennen von Session Hijacking mithilfe rotierender Aktualisierungstoken

So funktionieren Aktualisierungstoken

In diesem Abschnitt wird der OAuth 2.0-Token-Prozess erläutert und wie die Rotation des Aktualisierungstokens die Sicherheit verbessert.

OAuth 2.0-Token-Flow

OAuth 2.0

OAuth 2.0 verwaltet Aktualisierungstoken über eine definierte Schrittfolge. Wenn sich ein Benutzer anmeldet, stellt der Autorisierungsserver zwei Token bereit: ein kurzlebiges Zugriffstoken (gültig für 15–60 Minuten) und ein längerlebiges Aktualisierungstoken (gültig für 7–14 Tage).

So funktioniert der Vorgang:

1. Erstauthentifizierung

Nach einer erfolgreichen Anmeldung gibt das System aus:

  • Ein kurzfristiges Zugriffstoken für API-Aufrufe.
  • Ein längerfristiges Aktualisierungstoken zum Anfordern neuer Zugriffstoken.

2. Verwenden des Zugriffstokens

Der Client fügt das Zugriffstoken in den Autorisierungsheader für jede API-Anforderung ein, und zwar wie folgt:

Autorisierung: Inhaber eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 

3. Aktualisieren des Tokens

Wenn das Zugriffstoken abläuft, verwendet der Client das Aktualisierungstoken, um ein neues anzufordern, ohne dass sich der Benutzer erneut anmelden muss.

Als nächstes schauen wir uns an, wie die Token-Rotation diesen Prozess verbessert.

Token-Rotationsprozess

Die Tokenrotation erhöht die Sicherheit, indem sie Token nach jeder Aktualisierung ersetzt. So wird sichergestellt, dass Aktualisierungstoken nur einmalig verwendet werden können. So funktioniert es:

  1. Der Client bemerkt, dass das Zugriffstoken abgelaufen ist.
  2. Es sendet das aktuelle Aktualisierungstoken an den Token-Endpunkt.
  3. Der Server validiert das Aktualisierungstoken und stellt neue Zugriffs- und Aktualisierungstoken aus.
  4. Das alte Aktualisierungstoken ist ungültig.
  5. Der Server sendet die neuen Token an den Client zurück.
  6. Der Client aktualisiert seine gespeicherten Token.

Dieser Ansatz der „Einmalverwendung“ erstellt eine sichere Tokenkette und verringert so das Missbrauchsrisiko.

Um Aktualisierungstoken zur einmaligen Verwendung durchzusetzen, sollten Sie die folgenden Prüfungen in Betracht ziehen:

Überprüfen Zweck Durchführung
Erkennung der Token-Wiederverwendung Verhindern von Replay-Angriffen Verfolgen Sie verwendete Aktualisierungstoken in einer Blacklist
Nachfrist Handhaben Rennbedingungen Lassen Sie ein 30-Sekunden-Fenster für gleichzeitige Anfragen zu
Validierung der Token-Familie Token-Herkunft beibehalten Referenzen auf übergeordnete Token in neue Token einschließen

Die Tokenrotation läuft nahtlos im Hintergrund ab und erhöht die Sicherheit bei gleichzeitiger Gewährleistung eines reibungslosen Benutzererlebnisses. Mit dieser Methode gewährleisten Sie sichere, automatische Anmeldeinformationsaktualisierungen ohne häufige Benutzeranmeldungen.

Einrichten der Token-Rotation

Grundlegende Konfigurationsschritte

Um die Tokenrotation einzurichten, konfigurieren Sie Ihren Autorisierungsserver mit den folgenden Parametern:

  • Legen Sie die Lebensdauer des Zugriffstokens auf 15–30 Minuten fest.
  • Begrenzen Sie die Gültigkeit des Aktualisierungstokens auf maximal 7–14 Tage.
  • Aktivieren Sie Token-Validierungsprüfungen, um die Sicherheit zu gewährleisten.
  • Wenden Sie eine Ratenbegrenzung auf Token-Endpunkte an, um Missbrauch zu verhindern.

Ihr Server sollte ein Token-Register mit diesen wesentlichen Feldern verwalten:

Feld Zweck Beispielwert
Token-ID Eindeutige Kennung UUID-v4
Ausgabezeit Zeitstempel der Token-Erstellung 18.03.2025, 14:30 Uhr EST
Familien-ID Gruppenbezogene Token Familie-UUID-v4
Vorheriges Token Verfolgt das übergeordnete Token vorheriger Token-Hash
Widerrufsstatus Zeigt den Token-Status an aktiv/widerrufen

Fahren Sie nach der Konfiguration mit der Implementierung der Token-Rotation in Ihrem Code fort.

Programmierbeispiele

Hier ist ein Beispiel für die Token-Rotation mit Node.js:

const jwt = require('jsonwebtoken'); const crypto = require('crypto'); asynchrone Funktion rotateTokens(refreshToken) { const decodedToken = jwt.verify(refreshToken, process.env.SECRET_KEY); // Neues Token-Paar generieren const newAccessToken = jwt.sign( { userId: decodedToken.userId }, process.env.SECRET_KEY, { expiresIn: '30m' } ); const newRefreshToken = jwt.sign( { userId: decodedToken.userId, familyId: decodedToken.familyId, previousToken: crypto.createHash('sha256') .update(refreshToken).digest('hex') }, process.env.SECRET_KEY, { expiresIn: '7d' } ); // Altes Aktualisierungstoken ungültig machen await invalidateToken(refreshToken); return { accessToken: newAccessToken, refreshToken: newRefreshToken }; } 

Best Practices für die Token-Speicherung

Stellen Sie nach der Implementierung der Token-Rotation sicher, dass die Token sicher gespeichert werden, indem Sie die folgenden Vorgehensweisen befolgen:

  • Serverseitiger Speicher
    Verwenden Sie eine sichere, schnelle Datenbank wie Redis zum Speichern von Token-Metadaten. Die integrierte Ablaufunterstützung von Redis ist besonders hilfreich:
    warte auf redis.setex( `token:${tokenId}`, 604800, // 7 Tage in Sekunden JSON.stringify(tokenMetadata) ); 
  • Clientseitiger Speicher
    Speichern Sie für Webanwendungen Aktualisierungstoken in Nur-HTTP-Cookies mit den entsprechenden Sicherheitsflags:
    res.cookie('refreshToken', token, { httpOnly: true, secure: true, sameSite: 'strict', maxAge: 604800000 // 7 Tage in Millisekunden }); 
  • Mobile Anwendungen
    Verwenden Sie plattformspezifische sichere Speicheroptionen:
    • iOS: Schlüsselbunddienste
    • Android: EncryptedSharedPreferences
    • React Native: Verschlüsselter AsyncStorage

Vermeiden Sie diese Fehler beim Speichern von Token:

  • Bewahren Sie Token niemals in lokaler Speicher, da es anfällig für XSS-Angriffe ist.
  • Vermeiden Sie das Einbetten vertraulicher Daten in die JWT-Nutzlast.
  • Stellen Sie sicher, dass alle gespeicherten Daten verschlüsselt sind.
  • Bewahren Sie Zugriffs- und Aktualisierungstoken an getrennten Speicherorten auf, um Risiken zu verringern.

Sicherheitsmaßnahmen

Verhindern der Wiederverwendung von Token

Um Replay-Angriffe zu verhindern, überwachen Sie die Token-Nutzung mit einem zentralen System, das Änderungen des Token-Status verfolgt:

const tokenRegistry = { async markTokenUsed(tokenId, timestamp) { const token = warte auf db.tokens.findOne({ id: tokenId }); wenn (token.used || token.revoked) { throw new SecurityError('Token-Wiederverwendung erkannt'); } warte auf db.tokens.update({ id: tokenId, used: true, lastUsedAt: timestamp }); } }; 

Wenn eine Token-Wiederverwendung erkannt wird, ergreifen Sie sofort Maßnahmen:

  • Widerrufen Sie das Token um weiteren Missbrauch zu verhindern.
  • Protokollieren Sie den Vorfall für Prüfungszwecke.
  • Erneute Authentifizierung erzwingen für die betroffene Sitzung.
  • Administratoren benachrichtigen um den Verstoß zu untersuchen.

Diese Schritte ergänzen die unten beschriebenen Methoden zum Token-Widerruf.

Schritte zum Widerrufen des Tokens

Der Token-Widerruf kann je nach Situation auf verschiedenen Ebenen erfolgen:

Widerrufstyp Wann zu verwenden Auswirkungen
Einzelnes Token Verdächtige Aktivitäten auf einem Gerät Nur das spezifische Token ist betroffen
Familienwiderruf Verstoß mit mehreren Geräten Alle zugehörigen Token werden ungültig
Globaler Widerruf Schwerwiegender Sicherheitsvorfall Alle aktiven Token werden systemweit widerrufen

Hier ist ein Beispiel für den Widerruf eines Familientokens:

asynchrone Funktion revokeTokenFamily(familyId) { warte auf db.tokens.updateMany( { familyId: familyId }, { revoked: true, revokedAt: new Date(), reason: 'security_breach' } ); // Clients benachrichtigen warte auf notifyClients(familyId); // Sicherheitsereignis protokollieren warte auf logSecurityEvent({ type: 'family_revocation', familyId: familyId, timestamp: new Date() }); } 

Nutzungsbeschränkungen und Tracking

Die Überwachung von Token-Anfragen ist unerlässlich, um ungewöhnliche Aktivitäten zu erkennen. Nutzen Sie Ratenbegrenzungen und verfolgen Sie Nutzungsmuster, um potenzielle Bedrohungen zu identifizieren:

const rateLimits = { tokenRequests: { Fenster: „15 m“, max. Versuche: 100, Blockdauer: „1 h“ }, Aktualisierungsversuche: { Fenster: „24 h“, max. Versuche: 1000, Blockdauer: „24 h“ } }; 

Zu den wichtigsten zu überwachenden Kennzahlen gehören:

  • Häufigkeit der Token-Aktualisierungen pro Benutzer
  • Fehlgeschlagene Token-Aktualisierungsversuche
  • Geografische Herkunft der Anfragen
  • Zeitbasierte Nutzungstrends
  • Anzahl gleichzeitig aktiver Sitzungen

Richten Sie Warnmeldungen für verdächtiges Verhalten ein, beispielsweise:

  • Mehrere Aktualisierungsversuche von verschiedenen IPs
  • Schnelle Token-Rotationen
  • Zugang zu ungewöhnlichen Zeiten
  • Anfragen von unerwarteten Orten

Speichern Sie Token-Nutzungsdaten in einer Zeitreihendatenbank zur besseren Analyse und Bedrohungserkennung:

const metrics = { async recordTokenUsage(tokenId, context) { warte auf timeseriesDB.insert({ Zeitstempel: neues Datum(), tokenId: tokenId, Benutzer-ID: context.userId, IP-Adresse: context.ip, Benutzer-Agent: context.userAgent, GeoLocation: warte auf Geolokalisierung(context.ip) }); } }; 

Wenn Unregelmäßigkeiten festgestellt werden, erhöhen Sie die Sicherheit durch:

  • Erhöhung der Überwachungsintervalle
  • Verkürzung der Token-Ablaufzeiten
  • Hinzufügen zusätzlicher Überprüfungsschritte
  • Manuelle Überprüfungen für tiefergehende Untersuchungen einleiten

Prüfung und Wartung

Testverfahren

Automatisierte Tests sind unerlässlich, um sicherzustellen, dass der Token-Rotationsprozess wie vorgesehen funktioniert. Hier ist ein Beispiel für den Test dieser Funktionalität:

describe('Token-Rotationstests', () => { test('sollte Token rotieren und validieren', async () => { // Grundlegende Rotation testen const initialToken = warte auf generateRefreshToken(); const rotatedToken = warte auf rotateToken(initialToken); expect(rotatedToken).not.toEqual(initialToken); expect(await validateToken(rotatedToken)).toBeTruthy(); // Vollständigen Authentifizierungsfluss testen const authResponse = warte auf authenticate(credentials); warte auf simulateTokenExpiry(authResponse.accessToken); const newTokens = warte auf performTokenRotation(authResponse.refreshToken); warte auf verifyTokenLineage(authResponse.refreshToken, newTokens.refreshToken); }); }); 

Nachdem Sie bestätigt haben, dass die Token-Rotation wie erwartet funktioniert, behalten Sie die Systemleistung im Auge, um Probleme frühzeitig zu erkennen und zu beheben.

Systemüberwachung

Verfolgen Sie die Leistung der Token-Rotation mithilfe wichtiger Kennzahlen, um die Zuverlässigkeit aufrechtzuerhalten:

Metrisch Beschreibung Alarmschwelle
Rotationslatenz Zeit bis zur vollständigen Rotation > 500 ms
Erfolgsrate Erfolgreiche Rotationen < 99,9%
Token-Kettenlänge Rotationen in Folge > 50 Umdrehungen
Fehlerhäufigkeit Fehlgeschlagene Versuche pro Stunde > 10 Fehler

Protokollieren Sie außerdem alle Ereignisse im Token-Lebenszyklus zur besseren Rückverfolgbarkeit:

const rotationLogger = { async logRotationEvent(event) { await logger.info('token_rotation', { timestamp: neues Date().toISOString(), tokenId: event.tokenId, rotationDuration: event.duration, status: event.status, errorCode: event.error || null }); } }; 

Fehlermanagement

Auch bei sorgfältigen Tests und Überwachung können Fehler auftreten. Nutzen Sie spezielle Wiederherstellungsmechanismen, um diese effektiv zu beheben:

const errorHandler = { async handleRotationError(error, context) { // Primäre Fehlerbehandlung mit integriertem Leistungsschalter if (this.failureCount >= 5) { await this.activateFailover(); return; } switch(error.code) { case 'TOKEN_EXPIRED': await forceReauthentication(context.userId); break; case 'DATABASE_ERROR': await this.retryWithBackoff(context); break; default: await this.notifyAdministrator(error); } await metrics.recordError(error); }, async retryWithBackoff(context, attempts = 0) { if (attempts > 3) return; await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempts) * 1000)); return this.handleRotationError(context, attempts + 1); } }; 

Dieser Ansatz gewährleistet eine effiziente Fehlerbewältigung und minimiert Systemstörungen.

Abschluss

Die wichtigsten Erkenntnisse

Die Rotation der Aktualisierungstoken sorgt für ein Gleichgewicht zwischen Sicherheit, Leistung, Und Benutzererfahrung. Hier sind die wichtigsten Praktiken, die Sie beachten sollten:

  • Optimieren Sie die Systemleistung durch kontinuierliche Überwachung.
  • Implementieren Sie eine robuste Fehlerbehandlung um eine reibungslose Behebung von Problemen zu ermöglichen.
  • Führen Sie strenge Tests durch um den Rotationsmechanismus zu validieren und zu optimieren.

Schritt-für-Schritt-Anleitung zur Implementierung

Wenn Sie bereit sind, die Token-Rotation zu implementieren, finden Sie hier eine Aufschlüsselung des Prozesses:

  1. Ersteinrichtung
    Beginnen Sie mit dem Aufbau eines sicheren Token-Speichers mit branchenüblichen Verschlüsselungsmethoden. Integrieren Sie eine Ratenbegrenzung und stellen Sie sicher, dass Ihr Authentifizierungsserver bedarfsgerecht skalierbar ist.
  2. Sicherheitskonfiguration
    Definieren Sie kritische Parameter wie Token-Lebensdauer, Rotationsfenster und Grenzwerte. Hier ist beispielsweise eine einfache Konfiguration:
    const securityConfig = { tokenLifetime: 3600, // Token gültig für 1 Stunde rotationWindow: 86400, // Aktualisierungstoken gültig für 24 Stunden maxRotations: 30, // Maximale Anzahl an Token-Rotationen jwtAlgorithm: 'RS256', // Asymmetrischer Verschlüsselungsalgorithmus tokenLength: 256 // Tokengröße in Bits }; 
  3. Überwachungs-Setup
    Legen Sie Schwellenwerte für die Systemleistung fest und richten Sie Warnmeldungen für Anomalien ein. Seien Sie darauf vorbereitet, Ihre Infrastruktur zu skalieren, wenn die Messwerte eine erhöhte Nachfrage anzeigen.
  4. Produktionsbereitstellung
    Führen Sie das System schrittweise ein und behalten Sie dabei kritische Kennzahlen im Auge. Führen Sie detaillierte Protokolle der Rotationsereignisse für Audits und Fehlerbehebung. Für eine skalierbare und zuverlässige Infrastruktur sollten Sie Hosting-Lösungen wie Serverion (https://Serverion.com), das Hochleistungsumgebungen unterstützt.

Verwandte Blogbeiträge

de_DE_formal