MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tôi có nên lưu trữ mã thông báo JWT trong redis không?

TLDR:Nếu bạn muốn có khả năng thu hồi mã thông báo vào một thời điểm nào đó, vâng, hãy lưu trữ nó trong một thứ gì đó nhanh như Redis.

Một trong những nhược điểm được ghi nhận rõ ràng khi sử dụng JWT là không có cách đơn giản nào để thu hồi mã thông báo nếu ví dụ như người dùng cần đăng xuất hoặc mã thông báo đã bị xâm phạm. Thu hồi mã thông báo có nghĩa là phải tìm kiếm nó trong một số bộ nhớ và sau đó quyết định phải làm gì tiếp theo. Vì một trong những điểm của JWT là tránh các chuyến đi khứ hồi đến db, nên một thỏa hiệp tốt sẽ là lưu trữ nó trong một thứ gì đó ít bị đánh thuế hơn rdbms. Đó là một công việc hoàn hảo cho Redis.

Như đã đề xuất trong các nhận xét, một cách tiếp cận tốt là đưa danh sách này trở thành danh sách đen (tức là danh sách các mã thông báo không hợp lệ). Theo mỗi yêu cầu, bạn tra cứu danh sách để đảm bảo mã thông báo không có trong đó. Bạn có thể cải thiện thêm về dung lượng bộ nhớ và hiệu suất trong bước tra cứu bằng cách sử dụng thuật toán xác suất để lưu trữ mã thông báo. Một cách tiếp cận đơn giản là tra cứu nhiều lớp. Ví dụ:bạn có thể có một cửa hàng trong ứng dụng nhỏ chỉ theo dõi một vài byte đầu tiên (ví dụ:1 đến 4) byte mã thông báo trong danh sách đen của bạn. Sau đó, bộ nhớ đệm redis sẽ theo dõi phiên bản hoàn chỉnh hơn một chút của các mã thông báo tương tự (ví dụ:2 đến 8 byte đầu tiên). Sau đó, bạn có thể lưu trữ phiên bản đầy đủ của các mã thông báo trong danh sách đen bằng cách sử dụng một giải pháp bền bỉ hơn (hệ thống tệp, rdbms, v.v.). Đây là một chiến lược tra cứu lạc quan sẽ nhanh chóng xác nhận rằng một mã thông báo không có trong danh sách đen (đây sẽ là trường hợp phổ biến hơn). Nếu một mã thông báo đang được tra cứu tình cờ khớp với một mục trong danh sách đen trong ứng dụng (vì một vài byte đầu tiên của nó khớp với nhau), thì hãy chuyển sang tìm kiếm bổ sung trên cửa hàng redis, sau đó là cửa hàng liên tục nếu cần. Một số (hoặc tất cả) cửa hàng có thể được triển khai dưới dạng thử hoặc bảng băm. Một cấu trúc dữ liệu hiệu quả và tương đối đơn giản khác cần xem xét là một thứ gọi là bộ lọc Bloom.

Rõ ràng, bạn sẽ phải điều chỉnh cách tiếp cận ở trên nếu bạn thường xuyên đưa vào danh sách đen hàng triệu mã thông báo tồn tại lâu dài (điều này cũng có thể cho thấy rằng bạn đang gặp một vấn đề khác).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ClusterControl - Quản lý sao lưu nâng cao - MongoDB

  2. Làm thế nào để sử dụng Elasticsearch với MongoDB?

  3. SQL LPAD ()

  4. Cách hoạt động của tham số arrayFilters trong MongoDB

  5. .updateOne trên MongoDB không hoạt động trong Node.js