Ota meihin yhteyttä

info@serverion.com

Soita meille

+1 (302) 380 3902

Refresh Token Rotation: parhaat käytännöt kehittäjille

Haluatko tehdä sovelluksestasi turvallisemman ja pitää käyttäjät tyytyväisinä? Päivitä tunnuksen kierto voi auttaa. Se on menetelmä, jossa päivitystunnukset vaihdetaan jokaisen käytön jälkeen, mikä varmistaa, että ne ovat voimassa vain kertakäyttöisenä. Tämä parantaa turvallisuutta, estää uusintahyökkäykset ja yksinkertaistaa istunnon hallintaa – kaikki käyttökokemusta häiritsemättä.

Miksi käyttää Refresh Token Rotation -toimintoa?

  • Vahvempi turvallisuus: Rajoittaa tunnuksen väärinkäyttöä ja tarjoaa selkeät toimintalokit.
  • Parempi ohjaus: Hallitse istuntoja tarkasti ja peruuta käyttöoikeudet välittömästi tarvittaessa.
  • Sujuva käyttökokemus: Pitkät istunnot ilman toistuvia kirjautumisia.

Miten se toimii:

  1. Kun käyttöoikeustunnus vanhenee, päivitystunnusta käytetään uuden pyytämiseen.
  2. Palvelin antaa uusia käyttö- ja päivitystunnuksia ja mitätöi vanhan päivitystunnuksen.
  3. Tämä luo turvallisen merkkiketjun, mikä vähentää riskejä, kuten tokenvarkauksia.

Käyttöönoton tärkeimmät vaiheet:

  • Aseta lyhyt käyttöoikeus (15–30 minuuttia).
  • Käytä kertakäyttöisiä päivitystunnuksia (voimassa 7–14 päivää).
  • Tallenna tunnukset turvallisesti (esim. vain HTTP-evästeet tai suojattu palvelinpuolen tallennustila).
  • Tarkkaile epäilyttävää toimintaa, kuten tunnuksen uudelleenkäyttöä tai epätavallisia kirjautumismalleja.

Ottamalla käyttöön päivitystunnuksen vuorottelun vahvistat sovelluksesi turvallisuutta ja pidät todennuksen saumattomana käyttäjille. Oletko valmis oppimaan lisää? Sukeltakaamme sisään!

Istunnon kaappauksen havaitseminen pyörivien päivitystunnisteiden avulla

Kuinka Refresh Tokens toimii

Tässä osiossa selitetään OAuth 2.0 -tunnusprosessi ja kuinka päivitystunnuksen kierto parantaa turvallisuutta.

OAuth 2.0 Token Flow

OAuth 2.0

OAuth 2.0 hallitsee päivitystunnisteita määritellyn vaihesarjan kautta. Kun käyttäjä kirjautuu sisään, valtuutuspalvelin tarjoaa kaksi tokenia: lyhytaikaisen käyttötunnisteen (voimassa 15–60 minuuttia) ja pitkäkestoisen virkistystunnuksen (kesto 7–14 päivää).

Näin prosessi toimii:

1. Alkuperäinen todennus

Onnistuneen kirjautumisen jälkeen järjestelmässä on seuraavat ongelmat:

  • Lyhytaikainen käyttöoikeustunnus API-kutsuille.
  • Pidemmän aikavälin päivitystunnus uusien käyttöoikeuksien pyytämiseen.

2. Käyttöoikeustunnuksen käyttäminen

Asiakas lisää käyttöoikeustunnuksen valtuutusotsikkoon jokaiselle API-pyynnölle seuraavasti:

Valtuutus: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 

3. Tokenin päivittäminen

Kun käyttöoikeus vanhenee, asiakas pyytää uuden tunnuksen päivitystunnuksen avulla ilman, että käyttäjän on kirjauduttava sisään uudelleen.

Katsotaan seuraavaksi, kuinka merkkien kierto tehostaa tätä prosessia.

Tokenin kiertoprosessi

Tokenin kierto vahvistaa turvallisuutta vaihtamalla tunnukset jokaisen päivityksen jälkeen, mikä varmistaa, että päivitystunnukset ovat voimassa vain kerran. Näin se toimii:

  1. Asiakas huomaa, että käyttöoikeustunnus on vanhentunut.
  2. Se lähettää nykyisen päivitystunnuksen tunnuksen päätepisteeseen.
  3. Palvelin vahvistaa päivitystunnisteen ja antaa uusia käyttöoikeus- ja päivitystunnuksia.
  4. Vanha päivitystunnus on mitätöity.
  5. Palvelin lähettää uudet tunnukset takaisin asiakkaalle.
  6. Asiakas päivittää tallennetut tunnukset.

Tämä "kertakäyttöinen" lähestymistapa luo turvallisen merkkiketjun, mikä vähentää väärinkäytön riskiä.

Harkitse näitä tarkistuksia, jos haluat pakottaa kertakäyttöiset virkistystunnukset:

Tarkista Tarkoitus Toteutus
Tokenin uudelleenkäytön tunnistus Estä uusintahyökkäykset Seuraa käytettyjä päivitystunnuksia mustalla listalla
Armonaika Kahva kilpailuolosuhteet Salli 30 sekunnin ikkuna samanaikaisille pyynnöille
Token Family Validation Säilytä merkkijono Sisällytä vanhemman tunnusviittaukset uusiin tunnuksiin

Tokenin kierto toimii saumattomasti taustalla, mikä parantaa turvallisuutta ja pitää käyttökokemuksen sujuvana. Käyttämällä tätä menetelmää varmistat turvalliset, automaattiset tunnistetietojen päivitykset ilman toistuvia kirjautumisia.

Token Rotationin määrittäminen

Peruskokoonpanon vaiheet

Määritä valtuutuspalvelimesi seuraavilla parametreilla, jos haluat määrittää tunnuksen rotaation:

  • Aseta käyttöoikeustunnuksen kesto 15–30 minuuttia.
  • Rajoita päivitystunnuksen voimassaolo enintään 7–14 päivään.
  • Ota tunnuksen vahvistustarkistukset käyttöön turvallisuuden varmistamiseksi.
  • Käytä nopeusrajoitusta token-päätepisteissä väärinkäytön estämiseksi.

Palvelimesi tulee ylläpitää token-rekisteriä, jossa on seuraavat tärkeät kentät:

Ala Tarkoitus Esimerkkiarvo
Token ID Ainutlaatuinen tunniste uuid-v4
Julkaisuaika Tokenin luomisen aikaleima 18.3.2025, 14:30 EST
Perhetunnus Ryhmiin liittyvät tunnukset family-uuid-v4
Edellinen Token Seuraa päätunnusta prev-token-hash
Peruuttamisen tila Osoittaa tunnuksen tilan aktiivinen / peruutettu

Kun olet määrittänyt, siirry tunnuksen rotaation käyttöönottoon koodissasi.

Ohjelmointiesimerkkejä

Tässä on esimerkki tunnuksen kiertämisestä Node.js:n avulla:

const jwt = require('jsonwebtoken'); const crypto = require('crypto'); async function rotateTokens(refreshToken) { const decodedToken = jwt.verify(refreshToken, process.env.SECRET_KEY); // Luo uusi token-pari 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' } ); // Mitätöi vanha päivitystunnus await invalidateToken(refreshToken); return { accessToken: newAccessToken, refreshToken: newRefreshToken }; } 

Token Storage - parhaat käytännöt

Kun olet ottanut tunnukset käyttöön, varmista, että tunnukset on tallennettu turvallisesti noudattamalla näitä käytäntöjä:

  • Palvelinpuolen tallennustila
    Käytä suojattua, nopeaa tietokantaa, kuten Redis, tallentaaksesi tunnuksen metatiedot. Redisin sisäänrakennettu vanhenemistuki on erityisen hyödyllinen:
    odota redis.setex(`token:${tokenId}`, 604800, // 7 päivää sekunneissa JSON.stringify(tokenMetadata) ); 
  • Asiakaspuolen tallennustila
    Tallenna verkkosovellusten päivitystunnukset vain HTTP-evästeisiin, joissa on asianmukaiset suojausliput:
    res.cookie('refreshToken', token, { httpOnly: true, secure: true, sameSite: 'strict', maxAge: 604800000 // 7 päivää millisekunteina }); 
  • Mobiilisovellukset
    Käytä alustakohtaisia suojattuja tallennusvaihtoehtoja:
    • iOS: Avainnipupalvelut
    • Android: EncryptedSharedPreferences
    • React Native: Salattu AsyncStorage

Vältä näitä virheitä tallentaessasi tunnuksia:

  • Älä koskaan säilytä tokeneja sisällä localStorage, koska se on alttiina XSS-hyökkäyksille.
  • Vältä arkaluontoisten tietojen upottamista JWT-hyötykuormaan.
  • Varmista, että kaikki tallennetut tiedot on salattu.
  • Pidä pääsy- ja päivitystunnukset erillisissä säilytyspaikoissa riskien vähentämiseksi.

Turvatoimet

Tokenin uudelleenkäytön estäminen

Pysäytä toistohyökkäykset seuraamalla tunnuksen käyttöä keskitetyllä järjestelmällä, joka seuraa tunnuksen tilan muutoksia:

const tokenRegistry = { async markTokenUsed(tokenId, timestamp) { const token = await db.tokens.findOne({ id: tokenId }); if (token.used || token.revoked) { throw new SecurityError('Tokenin uudelleenkäyttö havaittu'); } await db.tokens.update({ id: tokenId, used: true, lastUsedAt: timestamp }); } }; 

Jos tunnuksen uudelleenkäyttö havaitaan, toimi välittömästi:

  • Peruuta tunnus estämään myöhemmän väärinkäytön.
  • Kirjaa tapahtuma tilintarkastustarkoituksiin.
  • Pakota uudelleentodennus asianomaiselle istunnolle.
  • Ilmoita järjestelmänvalvojille tutkimaan rikkomusta.

Nämä vaiheet täydentävät alla kuvattuja tunnuksen peruutusmenetelmiä.

Tokenin peruutusvaiheet

Tokenin peruuttamista voidaan soveltaa eri tasoilla tilanteesta riippuen:

Peruutustyyppi Milloin käyttää Vaikutus
Yksittäinen merkki Epäilyttävää toimintaa yhdellä laitteella Tämä vaikuttaa vain tiettyyn tunnukseen
Perheen peruuttaminen Rikkomus, joka koskee useita laitteita Kaikki asiaan liittyvät tunnukset mitätöidään
Maailmanlaajuinen peruutus Merkittävä turvallisuushäiriö Kaikki aktiiviset tunnukset peruutetaan koko järjestelmässä

Tässä on esimerkki perhetunnuksen peruuttamisesta:

async function revokeTokenFamily(familyId) { await db.tokens.updateMany( { familyId: familyId }, { revocated: true, revocatedAt: new Date(), reason: 'security_breach' } ); // Ilmoita asiakkaille await notifyClients(familyId); // Kirjaa lokiin tietoturvatapahtuma await logSecurityEvent({ type: 'family_revocation', familyId: familyId, timestamp: new Date() }); } 

Käyttörajoitukset ja seuranta

Token-pyyntöjen valvonta on välttämätöntä epätavallisen toiminnan havaitsemiseksi. Käytä nopeusrajoja ja seuraa käyttötapoja mahdollisten uhkien tunnistamiseen:

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

Tärkeitä seurattavia mittareita ovat:

  • Tunnusten päivitystiheys käyttäjää kohti
  • Tunnusten päivitysyritykset epäonnistuivat
  • Pyyntöjen maantieteellinen alkuperä
  • Aikaperusteiset käyttötrendit
  • Samanaikaisten aktiivisten istuntojen määrä

Määritä hälytykset epäilyttävästä käytöksestä, kuten:

  • Useita päivitysyrityksiä eri IP-osoitteista
  • Nopeat merkkien kierrokset
  • Pääsy epätavallisina aikoina
  • Pyynnöt odottamattomista paikoista

Tallenna tunnuksen käyttötiedot aikasarjatietokantaan parantaaksesi analysointia ja uhkien havaitsemista:

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) }); } }; 

Kun sääntöjenvastaisuuksia havaitaan, tehosta turvallisuutta seuraavasti:

  • Tarkkailuvälien lisääminen
  • Tokenin vanhenemisaikojen lyhentäminen
  • Lisätään ylimääräisiä vahvistusvaiheita
  • Aloita manuaaliset tarkistukset syvempää tutkimista varten

Testaus ja huolto

Testausmenettelyt

Automaattiset testit ovat välttämättömiä sen varmistamiseksi, että merkkien kiertoprosessi toimii suunnitellusti. Tässä on esimerkki tämän toiminnon testaamisesta:

describe('Token Rotation Tests', () => { test('pitäisi rotoida ja validoida tokenit', async () => { // Testaa perusrotaatiota const initialToken = await generateRefreshToken(); const rotatedToken = await rotateToken(initialToken); expect(rotatedToken).not.toEqual(initialToken); expect(await validateToken(rotatedToken)).toBeTruthy(); // Testaa koko todennusprosessi const authResponse = await authenticate(credentials); await simulateTokenExpiry(authResponse.accessToken); const newTokens = await performTokenRotation(authResponse.refreshToken); await verifyTokenLineage(authResponse.refreshToken, newTokens.refreshToken); }); }); 

Kun olet varmistanut, että tunnuksen kierto toimii odotetulla tavalla, pidä silmällä järjestelmän suorituskykyä tunnistaaksesi ja ratkaistaksesi ongelmat ajoissa.

Järjestelmän valvonta

Seuraa tunnuksen vuorottelun suorituskykyä tärkeimpien mittareiden avulla luotettavuuden ylläpitämiseksi:

Metrinen Kuvaus Varoituskynnys
Pyörimisviive Aika suorittaa kierto loppuun > 500 ms
Onnistumisprosentti Onnistuneet kierrokset < 99,9%
Token-ketjun pituus Pyörityksiä järjestyksessä > 50 kierrosta
Virheiden taajuus Epäonnistuneita yrityksiä tunnissa > 10 virhettä

Lisäksi kirjaa kaikki tunnuksen elinkaaritapahtumat paremman jäljitettävyyden varmistamiseksi:

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

Virheenhallinta

Jopa perusteellisella testauksella ja seurannalla voi silti esiintyä virheitä. Käytä erityisiä palautusmekanismeja ratkaistaksesi ne tehokkaasti:

const errorHandler = { async handleRotationError(error, context) { // Ensisijainen virheenkäsittely integroidulla katkaisimella 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); } }; 

Tämä lähestymistapa varmistaa virheiden tehokkaan hallinnan ja minimoi järjestelmän häiriöt.

Johtopäätös

Avaimet takeawayt

Päivitystunnuksen kierto varmistaa tasapainon turvallisuus, suorituskykyä, ja käyttökokemusta. Tässä ovat tärkeimmät käytännöt, jotka kannattaa pitää mielessä:

  • Optimoi järjestelmän suorituskyky jatkuvan seurannan kautta.
  • Ota käyttöön joustava virheenkäsittely mahdollistaa sujuvan palautumisen ongelmista.
  • Suorita tiukat testit vahvistaa ja hienosäätää kiertomekanismia.

Vaiheittainen käyttöönottoopas

Jos olet valmis ottamaan käyttöön tunnuksen kiertämisen, tässä on prosessin erittely:

  1. Alkuasetukset
    Aloita rakentamalla suojattu tunnistevarasto alan standardien salausmenetelmillä. Sisällytä nopeusrajoitus ja varmista, että todennuspalvelimesi voi skaalata kysyntää vastaavaksi.
  2. Suojausasetukset
    Määrittele kriittiset parametrit, kuten tunnuksen elinajat, kiertoikkunat ja rajat. Tässä on esimerkiksi yksinkertainen kokoonpano:
    const securityConfig = { tokenLifetime: 3600, // Tuntikaupalla voimassa olevat tokenit rotationWindow: 86400, // Päivitä 24 tuntia voimassa olevat tokenit maxRotations: 30, // Token-kiertojen enimmäismäärä jwtAlgorithm: 'RS256', // Epäsymmetrinen salausalgoritmi tokenLength: 256 // Tokenin koko bitteinä }; 
  3. Valvonta-asetukset
    Määritä kynnysarvot järjestelmän suorituskyvylle ja aseta hälytykset poikkeavuuksille. Ole valmis skaalaamaan infrastruktuuriasi, kun mittarit osoittavat kasvavan kysynnän.
  4. Tuotannon käyttöönotto
    Ota järjestelmä käyttöön asteittain pitäen silmällä kriittisiä mittareita. Ylläpidä yksityiskohtaisia lokeja kiertotapahtumista auditointia ja vianmääritystä varten. Jos haluat skaalautuvan ja luotettavan infrastruktuurin, harkitse isännöintiratkaisuja, kuten Serverion (https://serverion.com), joka tukee korkean suorituskyvyn ympäristöjä.

Aiheeseen liittyvät blogikirjoitukset

fi