Rumah > hujung hadapan web > tutorial js > Mengurus Log Keluar JWT dengan Senarai Hitam dan Redis: Panduan Mesra Permulaan

Mengurus Log Keluar JWT dengan Senarai Hitam dan Redis: Panduan Mesra Permulaan

Patricia Arquette
Lepaskan: 2025-01-05 14:29:40
asal
209 orang telah melayarinya

Managing JWT Logout with Blacklists and Redis: A Beginner-Friendly Guide

Apabila membina API selamat dengan JWT (JSON Web Token), pengendalian log keluar pengguna boleh menjadi rumit. Memandangkan JWT adalah tanpa kerakyatan, tiada cara luar biasa untuk membatalkan token selepas log keluar. Di situlah senarai hitam dan alatan seperti Redis dimainkan. Jika anda baru menggunakan konsep ini, jangan risau! Panduan ini akan menerangkan segala-galanya langkah demi langkah dan membantu anda melaksanakan penyelesaian praktikal.

Memahami Statelessness dan JWT

Sistem Tanpa Status

  • Sistem tanpa status tidak menyimpan sebarang maklumat sesi pengguna pada pelayan.
  • Setiap permintaan membawa semua data yang diperlukan (cth., JWT) untuk pelayan memprosesnya.

JWT

  • JWT mengandungi data pengguna (seperti id dan peranan) dan ditandatangani oleh pelayan.
  • Setelah dikeluarkan, pelayan tidak perlu menyimpan butiran token atau sesi.
  • Masalah: Jika pengguna log keluar, JWT mereka kekal sah sehingga tamat tempoh.

Apa itu Senarai Hitam?

Senarai hitam ialah senarai token yang telah tidak sah. Apabila pengguna log keluar, token mereka ditambahkan pada senarai ini. Setiap kali permintaan dibuat, pelayan menyemak sama ada token berada dalam senarai hitam. Jika ya, permintaan itu ditolak.

Langkah untuk Melaksanakan Senarai Hitam:

  1. Simpan token yang tidak sah dalam struktur data (cth., tatasusunan, Set atau pangkalan data).
  2. Apabila memproses permintaan, sahkan token tiada dalam senarai hitam.
  3. Tambahkan mekanisme pembersihan untuk mengalih keluar token yang telah tamat tempoh daripada senarai hitam.

Kenapa Redis?

Redis ialah pangkalan data nilai kunci dalam memori berprestasi tinggi. Ia sesuai untuk kes penggunaan seperti menyenarai hitamkan JWT kerana:

  • Kelajuan: Redis boleh mengendalikan beribu-ribu operasi baca/tulis sesaat.
  • Diedarkan: Berbilang pelayan boleh berkongsi contoh Redis yang sama untuk data yang konsisten.
  • TTL (Time-to-Live): Redis boleh mengalih keluar masukan secara automatik selepas tempoh yang ditetapkan.

Bagaimana untuk Bermula Tanpa Redis

Jika anda baru mengenali konsep ini, mulakan dengan penyelesaian dalam ingatan yang mudah:

const blacklist = new Set();

// Add token to blacklist
authController.logout = (req, res) => {
  const token = req.headers.authorization.split(" ")[1];
  blacklist.add(token);
  res.status(200).json({ message: "Logged out successfully" });
};

// Middleware to check token validity
middleware.verifyToken = (req, res, next) => {
  const token = req.headers.authorization.split(" ")[1];
  if (blacklist.has(token)) {
    return res.status(401).json({ message: "Invalid token" });
  }
  next();
};
Salin selepas log masuk
Salin selepas log masuk

Pendekatan ini berfungsi untuk projek berskala kecil tetapi mempunyai had. Jika apl anda berskala, anda memerlukan penyelesaian yang lebih mantap seperti Redis.

Bermula dengan Redis

1. Pasang Redis

  • Pasang Redis secara setempat: Panduan Pemasangan Redis
  • Sebagai alternatif, gunakan perkhidmatan awan seperti AWS Elasticache atau Redis Cloud.

2. Sepadukan Redis dalam Node.js

Gunakan perpustakaan ioredis untuk berinteraksi dengan Redis dalam apl Node.js anda:

const blacklist = new Set();

// Add token to blacklist
authController.logout = (req, res) => {
  const token = req.headers.authorization.split(" ")[1];
  blacklist.add(token);
  res.status(200).json({ message: "Logged out successfully" });
};

// Middleware to check token validity
middleware.verifyToken = (req, res, next) => {
  const token = req.headers.authorization.split(" ")[1];
  if (blacklist.has(token)) {
    return res.status(401).json({ message: "Invalid token" });
  }
  next();
};
Salin selepas log masuk
Salin selepas log masuk
npm install ioredis
Salin selepas log masuk

Redis vs Dalam Memori

Feature In-Memory (Set) Redis
Scalability Limited to a single server Distributed across servers
Speed Very fast Equally fast
Persistence Lost on server restart Data persists across restarts
Cleanup Manual Automatic with TTL

Langkah Seterusnya

  • Belajar Asas Redis: Fahami arahan seperti SETEX, GET dan DEL.
  • Secure Redis: Gunakan pengesahan dan penyenaraian putih IP.
  • Optimumkan Senarai Hitam: Simpan cincang token sahaja untuk keselamatan tambahan.

Bermula dengan mudah dengan penyelesaian dalam memori dan beralih secara beransur-ansur kepada Redis memastikan anda tidak terharu. Selamat mengekod!


Beri tahu saya dalam ulasan jika anda mempunyai sebarang soalan atau memerlukan bantuan dengan persediaan Redis. ?

Atas ialah kandungan terperinci Mengurus Log Keluar JWT dengan Senarai Hitam dan Redis: Panduan Mesra Permulaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan