Kontakta oss

info@serverion.com

Uppdatera tokenrotation: bästa praxis för utvecklare

Vill du göra din app säkrare samtidigt som användarna är nöjda? Uppdatera tokenrotation kan hjälpa. Det är en metod där uppdateringstokens ersätts efter varje användning, vilket säkerställer att de endast är giltiga för engångsbruk. Detta förbättrar säkerheten, blockerar replay-attacker och förenklar sessionshanteringen – allt utan att avbryta användarupplevelsen.

Varför använda Refresh Token Rotation?

  • Starkare säkerhet: Begränsar missbruk av token och ger tydliga aktivitetsloggar.
  • Bättre kontroll: Hantera sessioner exakt och återkalla åtkomst direkt om det behövs.
  • Smidig användarupplevelse: Långa sessioner utan frekventa inloggningar.

Hur det fungerar:

  1. När en åtkomsttoken löper ut, används uppdateringstoken för att begära en ny.
  2. Servern utfärdar nya åtkomst- och uppdateringstoken samtidigt som den gamla uppdateringstoken ogiltigförklaras.
  3. Detta skapar en säker kedja av tokens, vilket minskar risker som tokenstöld.

Viktiga steg att implementera:

  • Ställ in kort livslängd för åtkomsttoken (15–30 minuter).
  • Använd engångsuppdateringstokens (giltigt i 7–14 dagar).
  • Lagra tokens säkert (t.ex. HTTP-endast cookies eller säker lagring på serversidan).
  • Övervaka efter misstänkt aktivitet som återanvändning av token eller ovanliga inloggningsmönster.

Genom att använda uppdateringstokenrotation stärker du din apps säkerhet samtidigt som autentiseringen förblir smidig för användarna. Är du redo att lära dig mer? Låt oss dyka in!

Upptäcker kapning av sessioner med hjälp av roterande uppdateringstoken

Hur Refresh Tokens fungerar

Det här avsnittet förklarar OAuth 2.0-tokenprocessen och hur rotation av uppdateringstoken förbättrar säkerheten.

OAuth 2.0-tokenflöde

OAuth 2.0

OAuth 2.0 hanterar uppdateringstoken genom en definierad sekvens av steg. När en användare loggar in tillhandahåller auktoriseringsservern två tokens: en kortlivad åtkomsttoken (giltig i 15–60 minuter) och en längre livslängd uppdateringstoken (varar i 7–14 dagar).

Så här fungerar processen:

1. Initial autentisering

Efter en lyckad inloggning utfärdar systemet:

  • En kortsiktig åtkomsttoken för API-anrop.
  • En längre uppdateringstoken för att begära nya åtkomsttoken.

2. Använda åtkomsttoken

Klienten inkluderar åtkomsttoken i auktoriseringshuvudet för varje API-begäran, så här:

Auktorisation: Bärare eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 

3. Uppdaterar token

När åtkomsttoken löper ut använder klienten uppdateringstoken för att begära en ny utan att användaren behöver logga in igen.

Låt oss sedan titta på hur tokenrotation förbättrar denna process.

Token Rotation Process

Tokenrotation stärker säkerheten genom att byta ut tokens efter varje uppdatering, vilket säkerställer att uppdateringstoken endast är giltiga för en enda användning. Så här fungerar det:

  1. Klienten märker att åtkomsttoken har gått ut.
  2. Den skickar den aktuella uppdateringstoken till tokenslutpunkten.
  3. Servern validerar uppdateringstoken och utfärdar nya åtkomst- och uppdateringstoken.
  4. Den gamla uppdateringstoken är ogiltig.
  5. Servern skickar de nya tokens tillbaka till klienten.
  6. Klienten uppdaterar sina lagrade tokens.

Denna metod för "engångsanvändning" skapar en säker kedja av tokens, vilket minskar risken för missbruk.

För att upprätthålla uppdateringstoken för engångsbruk bör du överväga dessa kontroller:

Kontrollera Syfte Genomförande
Detektering av tokenåteranvändning Förhindra reprisattacker Spåra använda uppdateringstoken i en svartlista
Nådperiod Hantera tävlingsförhållanden Tillåt ett 30-sekunders fönster för samtidiga förfrågningar
Token familjevalidering Behåll token härstamning Inkludera referenser för överordnade token i nya tokens

Tokenrotation fungerar sömlöst i bakgrunden, vilket förbättrar säkerheten samtidigt som användarupplevelsen blir smidig. Genom att använda den här metoden säkerställer du säkra, automatiska autentiseringsuppdateringar utan frekventa användarinloggningar.

Ställa in tokenrotation

Grundläggande konfigurationssteg

För att ställa in tokenrotation, konfigurera din auktoriseringsserver med följande parametrar:

  • Ställ in åtkomsttokens livslängd till 15–30 minuter.
  • Begränsa uppdateringstokens giltighet till maximalt 7–14 dagar.
  • Aktivera tokenvalideringskontroller för att säkerställa säkerheten.
  • Tillämpa hastighetsbegränsning på token-slutpunkter för att förhindra missbruk.

Din server bör ha ett tokenregister med dessa viktiga fält:

Fält Syfte Exempelvärde
Token-ID Unik identifierare uuid-v4
Utgivningstid Tidsstämpel för tokenskapande 18/03/2025, 14:30 EST
Familje-ID Grupprelaterade tokens family-uuid-v4
Föregående token Spårar överordnad token prev-token-hash
Återkallelsestatus Indikerar tokenstatus aktiv/återkallad

När du har konfigurerat, gå vidare till att implementera tokenrotation i din kod.

Programmeringsexempel

Här är ett exempel på tokenrotation med Node.js:

const jwt = require('jsonwebtoken'); const crypto = require('crypto'); async function rotateTokens(refreshToken) { const decodedToken = jwt.verify(refreshToken, process.env.SECRET_KEY); // Generera nytt tokenpar 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' } );   Behöver du detta villkor? Behöver du detta fel? // Ogiltigförklara gammal uppdateringstoken await invalidateToken(refreshToken); return { accessToken: newAccessToken, refreshToken: newRefreshToken }; } 

Bästa praxis för tokenlagring

Efter att ha implementerat tokenrotation, se till att tokens lagras säkert genom att följa dessa metoder:

  • Lagring på serversidan
    Använd en säker, snabb databas som Redis för att lagra tokenmetadata. Redis inbyggda utgångsstöd är särskilt användbart:
    await redis.setex(`token:${tokenId}`, 604800, // 7 dagar i sekunder JSON.stringify(tokenMetadata)); 
  • Lagring på klientsidan
    För webbapplikationer, lagra uppdateringstoken i endast HTTP-cookies med korrekta säkerhetsflaggor:
    res.cookie('refreshToken', token, { httpOnly: true, secure: true, sameSite: 'strict', maxAge: 604800000 // 7 dagar i millisekunder }); 
  • Mobila applikationer
    Använd plattformsspecifika säkra lagringsalternativ:
    • iOS: Nyckelringtjänster
    • Android: EncryptedSharedPreferences
    • React Native: Krypterad AsyncStorage

Undvik dessa misstag när du lagrar tokens:

  • Förvara aldrig tokens i localStorage, eftersom det är sårbart för XSS-attacker.
  • Undvik att bädda in känslig data i JWT-nyttolasten.
  • Se till att all lagrad data är krypterad.
  • Håll åtkomst och uppdatera tokens på separata lagringsplatser för att minska riskerna.

Säkerhetsåtgärder

Förhindrar återanvändning av token

För att stoppa omspelsattacker, övervaka tokenanvändning med ett centraliserat system som spårar tokentillståndsändringar:

const tokenRegistry = { async markTokenUsed(tokenId, timestamp) { const token = await db.tokens.findOne({ id: tokenId }); if (token.used || token.revoked) { throw new SecurityError('Återanvändning av token upptäckt'); } await db.tokens.update({ id: tokenId, used: true, lastUsedAt: timestamp }); } };   Behöver du mer information om återanvändning av token? 

Om tokenåteranvändning upptäcks, vidta omedelbara åtgärder:

  • Återkalla token för att förhindra ytterligare missbruk.
  • Logga händelsen för revisionsändamål.
  • Framtvinga ny autentisering för den berörda sessionen.
  • Meddela administratörer för att utreda intrånget.

Dessa steg kompletterar metoderna för återkallande av token som beskrivs nedan.

Steg för återkallande av token

Tokenåterkallelse kan tillämpas på olika nivåer beroende på situationen:

Återkallelsetyp När du ska använda Inverkan
Single Token Misstänkt aktivitet på en enhet Endast den specifika token påverkas
Familjeåterkallelse Intrång som involverar flera enheter Alla relaterade tokens är ogiltiga
Global återkallelse Stor säkerhetsincident Alla aktiva tokens återkallas i hela systemet

Här är ett exempel på återkallande av familjetoken:

async function revokeTokenFamily(familyId) { await db.tokens.updateMany({ familyId: familyId }, { revoked: true, revokedAt: new Date(), reason: 'security_breach' } ); // Meddela klienter await notifyClients(familyId); // Logga säkerhetshändelse await logSecurityEvent({ type: 'family_revocation', familyId: familyId, timestamp: new Date() }); } ... 

Användningsgränser och spårning

Att övervaka tokenförfrågningar är avgörande för att upptäcka ovanlig aktivitet. Använd hastighetsgränser och spåra användningsmönster för att identifiera potentiella hot:

const rateLimits = { tokenRequests: { window: '15m', maxAttempts: 100, blockDuration: '1h' }, refreshAttempts: { window: '24h', maxAttempts: 1000, blockDuration: '24h' } }; 

Viktiga mätvärden att övervaka inkluderar:

  • Frekvens för tokenuppdateringar per användare
  • Misslyckade tokenuppdateringsförsök
  • Geografiskt ursprung för förfrågningar
  • Tidsbaserade användningstrender
  • Antal samtidiga aktiva sessioner

Ställ in varningar för misstänkt beteende, som:

  • Flera uppdateringsförsök från olika IP-adresser
  • Snabba tokenrotationer
  • Tillträde under ovanliga tider
  • Förfrågningar från oväntade platser

Lagra tokenanvändningsdata i en tidsseriedatabas för bättre analys och hotdetektering:

const metrics = { async recordTokenUsage(tokenId, context) { await timeseriesDB.insert({ timestamp: new Date(), tokenId: tokenId, userId: context.userId, ipAddress: context.ip, userAgent: context.userAgent, geoLocation: await geolocate(context.ip) }); } };   Please be aware that the context may be aware that the context has been provided text and the functions. Attribute specificerar att dela innehållet med andra källor. Insert the context is objectionable. UserAgent Name ... 

När oegentligheter upptäcks, höj säkerheten genom att:

  • Ökade övervakningsintervaller
  • Förkorta tokens utgångstider
  • Lägger till extra verifieringssteg
  • Initiera manuella granskningar för djupare utredning

Testning och underhåll

Testprocedurer

Automatiserade tester är viktiga för att säkerställa att tokenrotationsprocessen fungerar som avsett. Här är ett exempel på hur du testar den här funktionen:

describe('Token Rotation Tests', () => { test('ska rotera och validera tokens', async () => { // Testa grundläggande rotation const initialToken = await generateRefreshToken(); const rotatedToken = await rotateToken(initialToken); expect(rotatedToken).not.toEqual(initialToken); expect(await validateToken(rotatedToken)).toBeTruthy(); // Testa fullständigt autentiseringsflöde const authResponse = await authentic(credentials); await simulateTokenExpiry(authResponse.accessToken); const newTokens = await performTokenRotation(authResponse.refreshToken); await verifyTokenLineage(authResponse.refreshToken, newTokens.refreshToken); }); }); 

När du har bekräftat att tokenrotation fungerar som förväntat, håll ett öga på systemets prestanda för att identifiera och lösa problem tidigt.

Systemövervakning

Spåra prestanda för tokenrotation med hjälp av nyckelmått för att bibehålla tillförlitligheten:

Metrisk Beskrivning Varningströskel
Rotationslatens Dags att slutföra rotationen > 500 ms
Framgångsfrekvens Framgångsrika rotationer < 99.9%
Token Kedjelängd Rotationer i följd > 50 varv
Felfrekvens Misslyckade försök per timme > 10 fel

Logga dessutom alla tokens livscykelhändelser för bättre spårbarhet:

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

Felhantering

Även med noggrann testning och övervakning kan fel fortfarande uppstå. Använd dedikerade återställningsmekanismer för att hantera dem effektivt:

const errorHandler = { async handleRotationError(error, context) { // Primär felhantering med integrerad brytare 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); } }; ... 

Detta tillvägagångssätt säkerställer att fel hanteras effektivt, vilket minimerar störningar i systemet.

Slutsats

Viktiga takeaways

Refresh token rotation säkerställer en balans mellan säkerhet, prestanda, och användarupplevelse. Här är de grundläggande metoderna att tänka på:

  • Optimera systemets prestanda genom kontinuerlig övervakning.
  • Implementera motståndskraftig felhantering för att möjliggöra smidig återhämtning från problem.
  • Genomför rigorösa tester för att validera och finjustera rotationsmekanismen.

Steg-för-steg-guide för implementering

Om du är redo att implementera tokenrotation, här är en uppdelning av processen:

  1. Initial installation
    Börja med att bygga säker tokenlagring med branschstandardkrypteringsmetoder. Inkludera hastighetsbegränsning och se till att din autentiseringsserver kan skalas för att möta efterfrågan.
  2. Säkerhetskonfiguration
    Definiera kritiska parametrar som tokens livslängder, rotationsfönster och gränser. Till exempel, här är en enkel konfiguration:
    const securityConfig = { tokenLifetime: 3600, // Tokens giltiga i 1 timmes rotationWindow: 86400, // Uppdatera tokens giltiga i 24 timmar maxRotations: 30, // Maximalt antal tokenrotationer jwtAlgorithm: 'RS256', // Asymmetrisk krypteringsalgoritm tokenLength: 256 // Tokenstorlek i bitar }; 
  3. Övervakningsinställningar
    Upprätta trösklar för systemets prestanda och ställ in varningar för avvikelser. Var beredd att skala din infrastruktur när statistik visar ökad efterfrågan.
  4. Produktionsinstallation
    Rulla ut systemet gradvis och håll ett öga på kritiska mätvärden. Upprätthåll detaljerade loggar över rotationshändelser för granskning och felsökning. För en skalbar och pålitlig infrastruktur, överväg värdlösningar som t.ex Serverion (https://serverion.com), som stöder högpresterande miljöer.

Relaterade blogginlägg

sv_SE