Hubungi kami

info@serverion.com

Hubungi kami

+1 (302) 380 3902

Rotasi Token Penyegaran: Praktik Terbaik untuk Pengembang

Ingin membuat aplikasi Anda lebih aman sekaligus membuat pengguna senang? Rotasi token penyegaran dapat membantu. Ini adalah metode di mana token penyegaran diganti setelah setiap penggunaan, memastikan token tersebut hanya berlaku untuk penggunaan satu kali. Ini meningkatkan keamanan, memblokir serangan replay, dan menyederhanakan manajemen sesi – semuanya tanpa mengganggu pengalaman pengguna.

Mengapa Menggunakan Rotasi Token Penyegaran?

  • Keamanan yang Lebih Kuat: Membatasi penyalahgunaan token dan menyediakan log aktivitas yang jelas.
  • Kontrol yang Lebih Baik: Kelola sesi secara tepat dan cabut akses segera jika diperlukan.
  • Pengalaman Pengguna yang Lancar: Sesi panjang tanpa login yang sering.

Cara kerjanya:

  1. Ketika token akses kedaluwarsa, token penyegaran digunakan untuk meminta token akses baru.
  2. Server mengeluarkan token akses dan penyegaran baru sekaligus membatalkan token penyegaran lama.
  3. Ini menciptakan rantai token yang aman, mengurangi risiko seperti pencurian token.

Langkah-langkah Utama untuk Implementasi:

  • Tetapkan masa pakai token akses yang pendek (15–30 menit).
  • Gunakan token penyegaran sekali pakai (berlaku selama 7–14 hari).
  • Simpan token dengan aman (misalnya, cookie khusus HTTP atau penyimpanan sisi server yang aman).
  • Pantau aktivitas mencurigakan seperti penggunaan kembali token atau pola login yang tidak biasa.

Dengan menerapkan rotasi token penyegaran, Anda memperkuat keamanan aplikasi sekaligus menjaga autentikasi tetap lancar bagi pengguna. Siap mempelajari lebih lanjut? Mari kita bahas!

Mendeteksi pembajakan sesi menggunakan token penyegaran bergilir

Cara Kerja Token Penyegaran

Bagian ini menjelaskan proses token OAuth 2.0 dan bagaimana rotasi token penyegaran meningkatkan keamanan.

Aliran Token OAuth 2.0

OAuth2.0 adalah bahasa pemrograman yang digunakan untuk membuat dan mengelola data.

OAuth 2.0 mengelola token pembaruan melalui serangkaian langkah yang ditentukan. Saat pengguna masuk, server otorisasi menyediakan dua token: token akses jangka pendek (berlaku selama 15–60 menit) dan token pembaruan jangka panjang (berlaku selama 7–14 hari).

Berikut cara kerjanya:

1. Otentikasi Awal

Setelah berhasil login, sistem mengeluarkan:

  • Token akses jangka pendek untuk panggilan API.
  • Token penyegaran jangka panjang untuk meminta token akses baru.

2. Menggunakan Token Akses

Klien menyertakan token akses di header Otorisasi untuk setiap permintaan API, seperti ini:

Otorisasi: Pembawa eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 

3. Menyegarkan Token

Ketika token akses kedaluwarsa, klien menggunakan token penyegaran untuk meminta token baru tanpa mengharuskan pengguna untuk masuk lagi.

Selanjutnya, mari kita lihat bagaimana rotasi token meningkatkan proses ini.

Proses Rotasi Token

Rotasi token memperkuat keamanan dengan mengganti token setelah setiap pembaruan, memastikan token pembaruan hanya berlaku untuk satu kali penggunaan. Begini cara kerjanya:

  1. Klien menyadari token akses telah kedaluwarsa.
  2. Ia mengirimkan token penyegaran terkini ke titik akhir token.
  3. Server memvalidasi token penyegaran dan mengeluarkan akses baru serta token penyegaran.
  4. Token penyegaran lama tidak berlaku lagi.
  5. Server mengirimkan token baru kembali ke klien.
  6. Klien memperbarui token yang tersimpan.

Pendekatan "sekali pakai" ini menciptakan rantai token yang aman, sehingga mengurangi risiko penyalahgunaan.

Untuk menerapkan token penyegaran sekali pakai, pertimbangkan pemeriksaan berikut:

Memeriksa Tujuan Pelaksanaan
Deteksi Penggunaan Kembali Token Mencegah serangan replay Lacak token penyegaran yang digunakan dalam daftar hitam
Masa Tenggang Menangani kondisi balapan Izinkan jendela 30 detik untuk permintaan bersamaan
Validasi Keluarga Token Pertahankan garis keturunan token Sertakan referensi token induk dalam token baru

Rotasi token berjalan lancar di latar belakang, meningkatkan keamanan sekaligus menjaga kelancaran pengalaman pengguna. Dengan menggunakan metode ini, Anda memastikan pembaruan kredensial otomatis yang aman tanpa harus sering login pengguna.

Menyiapkan Rotasi Token

Langkah-Langkah Konfigurasi Dasar

Untuk mengatur rotasi token, konfigurasikan server otorisasi Anda dengan parameter berikut:

  • Tetapkan masa pakai token akses menjadi 15–30 menit.
  • Batasi validitas token penyegaran hingga maksimum 7–14 hari.
  • Aktifkan pemeriksaan validasi token untuk memastikan keamanan.
  • Terapkan pembatasan laju pada titik akhir token untuk mencegah penyalahgunaan.

Server Anda harus memelihara registri token dengan bidang-bidang penting berikut:

Bidang Tujuan Contoh Nilai
ID Token Pengidentifikasi unik uuid v4 bahasa Indonesia
Waktu Terbit Stempel waktu pembuatan token 18/03/2025, 14.30 Waktu Timur
ID Keluarga Token terkait grup keluarga-uuid-v4
Token Sebelumnya Melacak token induk hash-token-sebelumnya
Status Pencabutan Menunjukkan status token aktif/dicabut

Setelah dikonfigurasi, lanjutkan ke penerapan rotasi token dalam kode Anda.

Contoh Pemrograman

Berikut contoh rotasi token menggunakan Node.js:

const jwt = require('jsonwebtoken'); const crypto = require('crypto'); async function rotateTokens(refreshToken) { const decodedToken = jwt.verify(refreshToken, process.env.SECRET_KEY); // Hasilkan pasangan token baru 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' } ); // Batalkan token penyegaran lama await invalidateToken(refreshToken); return { accessToken: newAccessToken, refreshToken: newRefreshToken }; } 

Praktik Terbaik Penyimpanan Token

Setelah menerapkan rotasi token, pastikan token disimpan dengan aman dengan mengikuti praktik berikut:

  • Penyimpanan Sisi Server
    Gunakan database yang aman dan cepat seperti Redis untuk menyimpan metadata token. Dukungan kedaluwarsa bawaan Redis sangat membantu:
    await redis.setex( `token:${tokenId}`, 604800, // 7 hari dalam detik JSON.stringify(tokenMetadata) ); 
  • Penyimpanan sisi klien
    Untuk aplikasi web, simpan token penyegaran dalam cookie khusus HTTP dengan tanda keamanan yang tepat:
    res.cookie('refreshToken', token, { httpOnly: true, secure: true, sameSite: 'strict', maxAge: 604800000 // 7 hari dalam milidetik }); 
  • Aplikasi Seluler
    Gunakan opsi penyimpanan aman khusus platform:
    • iOS: Layanan Gantungan Kunci
    • Android: Preferensi Bersama Terenkripsi
    • React Native: Penyimpanan Async Terenkripsi

Hindari kesalahan ini saat menyimpan token:

  • Jangan pernah menyimpan token di penyimpanan lokal, karena rentan terhadap serangan XSS.
  • Hindari penyematan data sensitif dalam muatan JWT.
  • Pastikan semua data yang disimpan dienkripsi.
  • Simpan token akses dan penyegaran di lokasi penyimpanan terpisah untuk mengurangi risiko.

Langkah-langkah Keamanan

Mencegah Penggunaan Kembali Token

Untuk menghentikan serangan replay, pantau penggunaan token dengan sistem terpusat yang melacak perubahan status token:

const tokenRegistry = { async markTokenUsed(tokenId, stempel waktu) { const token = await db.tokens.findOne({ id: tokenId }); if (token.used || token.revoked) { throw new SecurityError('Penggunaan ulang token terdeteksi'); } await db.tokens.update({ id: tokenId, used: true, lastUsedAt: stempel waktu }); } }; 

Jika terdeteksi penggunaan kembali token, segera ambil tindakan:

  • Cabut tokennya untuk mencegah penyalahgunaan lebih lanjut.
  • Catat kejadiannya untuk tujuan audit.
  • Paksa autentikasi ulang untuk sesi yang terpengaruh.
  • Beritahukan administrator untuk menyelidiki pelanggaran tersebut.

Langkah-langkah ini melengkapi metode pencabutan token yang diuraikan di bawah ini.

Langkah Pencabutan Token

Pencabutan token dapat diterapkan pada berbagai tingkatan tergantung pada situasinya:

Jenis Pencabutan Kapan Harus Menggunakan Dampak
Token Tunggal Aktivitas mencurigakan di satu perangkat Hanya token tertentu yang terpengaruh
Pencabutan Keluarga Pelanggaran yang melibatkan beberapa perangkat Semua token terkait tidak valid
Pencabutan Global Insiden keamanan besar Semua token aktif dicabut di seluruh sistem

Berikut contoh pencabutan token keluarga:

fungsi async revokeTokenFamily(familyId) { tunggu db.tokens.updateMany( { familyId: familyId }, { dicabut: benar, revokedAt: new Date(), alasan: 'pelanggaran_keamanan' } ); // Beri tahu klien tunggu notifyClients(familyId); // Catat kejadian keamanan tunggu logSecurityEvent({ jenis: 'pencabutan_keluarga', familyId: familyId, stempel waktu: new Date() }); } 

Batasan Penggunaan dan Pelacakan

Pemantauan permintaan token sangat penting untuk mendeteksi aktivitas yang tidak biasa. Gunakan batas kecepatan dan lacak pola penggunaan untuk mengidentifikasi potensi ancaman:

const rateLimits = { tokenRequests: { jendela: '15mnt', maxAttempts: 100, blockDuration: '1j' }, refreshAttempts: { jendela: '24j', maxAttempts: 1000, blockDuration: '24j' } }; 

Metrik utama yang perlu dipantau meliputi:

  • Frekuensi pembaruan token per pengguna
  • Upaya penyegaran token gagal
  • Asal geografis permintaan
  • Tren penggunaan berdasarkan waktu
  • Jumlah sesi aktif bersamaan

Siapkan peringatan untuk perilaku mencurigakan, seperti:

  • Beberapa kali upaya penyegaran dari IP yang berbeda
  • Rotasi token cepat
  • Akses selama jam-jam yang tidak biasa
  • Permintaan dari lokasi yang tidak terduga

Simpan data penggunaan token dalam database deret waktu untuk analisis dan deteksi ancaman yang lebih baik:

metrik konstan = { penggunaan token asinkron (tokenId, konteks) { tunggu timeseriesDB.masukkan({ stempel waktu: Tanggal baru(), id token: id token, id pengguna: konteks.id pengguna, alamat ip: konteks.ip, agen pengguna: konteks.agen pengguna, lokasi geografis: tunggu geolokasi(konteks.ip) }); } }; 

Jika ditemukan kejanggalan, tingkatkan keamanan dengan cara:

  • Meningkatkan interval pemantauan
  • Memperpendek waktu kedaluwarsa token
  • Menambahkan langkah verifikasi tambahan
  • Memulai tinjauan manual untuk investigasi lebih dalam

Pengujian dan Pemeliharaan

Prosedur Pengujian

Pengujian otomatis sangat penting untuk memastikan proses rotasi token berjalan sebagaimana mestinya. Berikut ini contoh cara menguji fungsionalitas ini:

describe('Uji Rotasi Token', () => { test('harus memutar dan memvalidasi token', async () => { // Uji rotasi dasar const initialToken = await generateRefreshToken(); const rotatedToken = await rotateToken(initialToken); expect(rotatedToken).not.toEqual(initialToken); expect(await validateToken(rotatedToken)).toBeTruthy(); // Uji alur autentikasi penuh const authResponse = await authenticate(credentials); await simulateTokenExpiry(authResponse.accessToken); const newTokens = await performTokenRotation(authResponse.refreshToken); await verifyTokenLineage(authResponse.refreshToken, newTokens.refreshToken); }); }); 

Setelah Anda mengonfirmasi bahwa rotasi token berfungsi seperti yang diharapkan, awasi kinerja sistem untuk mengidentifikasi dan menyelesaikan masalah sejak dini.

Pemantauan Sistem

Lacak kinerja rotasi token menggunakan metrik utama untuk menjaga keandalan:

Metrik Deskripsi Ambang Peringatan
Latensi Rotasi Saatnya menyelesaikan rotasi > 500 md
Tingkat Keberhasilan Rotasi yang berhasil < 99.9%
Panjang Rantai Token Rotasi secara berurutan > 50 rotasi
Frekuensi Kesalahan Jumlah percobaan yang gagal per jam > 10 kesalahan

Selain itu, catat semua peristiwa siklus hidup token untuk keterlacakan yang lebih baik:

const rotationLogger = { async logRotationEvent(peristiwa) { await logger.info('rotasi_token', { stempel waktu: new Tanggal().toISOString(), tokenId: peristiwa.tokenId, durasirotasi: peristiwa.durasi, status: peristiwa.status, kodekesalahan: peristiwa.kesalahan || null }); } }; 

Manajemen Kesalahan

Bahkan dengan pengujian dan pemantauan menyeluruh, kesalahan masih dapat terjadi. Gunakan mekanisme pemulihan khusus untuk mengatasinya secara efektif:

const errorHandler = { async handleRotationError(error, context) { // Penanganan kesalahan utama dengan pemutus sirkuit terpadu 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); } }; 

Pendekatan ini memastikan kesalahan dikelola secara efisien dan meminimalkan gangguan pada sistem.

Kesimpulan

Poin-poin Utama

Rotasi token penyegaran memastikan keseimbangan antara keamanan, pertunjukan, Dan pengalaman penggunaBerikut ini adalah praktik inti yang perlu diingat:

  • Mengoptimalkan kinerja sistem melalui pemantauan berkelanjutan.
  • Terapkan penanganan kesalahan yang tangguh untuk memungkinkan pemulihan yang lancar dari masalah.
  • Melakukan pengujian yang ketat untuk memvalidasi dan menyempurnakan mekanisme rotasi.

Panduan Langkah demi Langkah untuk Implementasi

Jika Anda siap menerapkan rotasi token, berikut rincian prosesnya:

  1. Pengaturan Awal
    Mulailah dengan membangun penyimpanan token yang aman menggunakan metode enkripsi standar industri. Sertakan pembatasan kecepatan dan pastikan server autentikasi Anda dapat diskalakan untuk memenuhi permintaan.
  2. Konfigurasi Keamanan
    Tentukan parameter penting seperti masa pakai token, jendela rotasi, dan batasan. Misalnya, berikut konfigurasi sederhananya:
    const securityConfig = { tokenLifetime: 3600, // Token berlaku selama 1 jam rotationWindow: 86400, // Token penyegaran berlaku selama 24 jam maxRotations: 30, // Jumlah maksimum rotasi token jwtAlgorithm: 'RS256', // Algoritma enkripsi asimetris tokenLength: 256 // Ukuran token dalam bit }; 
  3. Pengaturan Pemantauan
    Tetapkan ambang batas untuk kinerja sistem dan atur peringatan untuk anomali. Bersiaplah untuk meningkatkan infrastruktur Anda saat metrik menunjukkan peningkatan permintaan.
  4. Penerapan Produksi
    Luncurkan sistem secara bertahap, dengan memperhatikan metrik yang penting. Simpan catatan terperinci tentang peristiwa rotasi untuk audit dan pemecahan masalah. Untuk infrastruktur yang dapat diskalakan dan andal, pertimbangkan solusi hosting seperti Serverion (https://serverion.com), yang mendukung lingkungan berkinerja tinggi.

Artikel Blog Terkait

id_ID