Link to original video by Tips Javascript
Đánh bại Senior: JWT Logout đơn giản - mà không làm ảnh hưởng đến các thiết bị khác cùng tài khoản.

Tóm tắt ngắn:
- Video hướng dẫn cách thực hiện đăng xuất (logout) JWT đơn giản mà không ảnh hưởng đến các thiết bị khác đang sử dụng cùng một tài khoản.
- Điểm mấu chốt là sử dụng
jti
(JWT ID) – một định danh duy nhất cho mỗi token – để theo dõi và vô hiệu hóa token cụ thể, thay vì lưu trữ toàn bộ token trong danh sách đen (blacklist). Các công nghệ được đề cập bao gồm JWT, Redis (để lưu trữ danh sách đen), và thư viện UUID để tạojti
. Facebook và Instagram được dùng làm ví dụ minh họa. - Phương pháp này đảm bảo bảo mật, hiệu quả và tuân thủ nguyên tắc không lưu trữ token trong database. Nó giải quyết vấn đề logout trên nhiều thiết bị một cách hiệu quả.
- Video trình bày chi tiết quá trình triển khai, bao gồm cả việc tạo và quản lý danh sách đen chứa
jti
của các token đã bị vô hiệu hóa.
Tóm tắt chi tiết:
Video chia thành các phần chính sau:
Phần 1: Giới thiệu vấn đề và cơ chế hoạt động của JWT:
- Video đặt ra vấn đề: Làm sao để đăng xuất một thiết bị khỏi tài khoản sử dụng JWT mà không ảnh hưởng đến các thiết bị khác?
- Giải thích cấu trúc của JWT, gồm ba phần được mã hóa base64, nhấn mạnh tầm quan trọng của việc bảo mật
secret key
. "Nếu như một hệ thống của chúng ta vô tình làm lộ cái key secret này thì xem như hệ thống của chúng ta là tiêu." - Giới thiệu khái niệm danh sách đen (blacklist) để lưu trữ các token đã bị vô hiệu hóa, sử dụng Redis vì tốc độ truy vấn nhanh. Tuy nhiên, nhấn mạnh không được lưu trữ toàn bộ token trong blacklist, chỉ lưu trữ thông tin cần thiết để nhận diện token đó.
Phần 2: Phương pháp đơn giản (không hiệu quả với nhiều thiết bị):
- Đề xuất phương pháp đơn giản: chỉ lưu trữ
user ID
trong blacklist. Phương pháp này không hiệu quả khi người dùng đăng nhập trên nhiều thiết bị vì tất cả đều có cùnguser ID
.
Phần 3: Phương pháp sử dụng App ID/Browser Fingerprint (không tối ưu):
- Đề xuất phương pháp sử dụng
App ID
(cho mobile) vàBrowser Fingerprint
để phân biệt các thiết bị. Tuy nhiên, phương pháp này bị chỉ trích vì phụ thuộc vào bên thứ ba và làm phức tạp quá trình phát triển.
Phần 4: Phương pháp tối ưu sử dụng jti
:
- Giới thiệu giải pháp tối ưu: sử dụng
jti
(JWT ID) – một định danh duy nhất được tạo bởi thư viện UUID cho mỗi token. "Git trong JWT chính làjti
." - Giải thích cách sử dụng
jti
để nhận diện và vô hiệu hóa token cụ thể trên một thiết bị mà không ảnh hưởng đến các thiết bị khác. Chỉ cần lưu trữjti
vàuser ID
trong blacklist. - Minh họa bằng code và demo: Đăng nhập trên hai thiết bị (iPad và iPhone), đăng xuất trên iPhone và kiểm tra xem iPad vẫn hoạt động bình thường. "Nó chính xác nó đã thu hồi rồi anh chị. Nó đã trả về trạng thái 401 tức là thu hồi cái token này rồi và sau khi cái iPhone này ngừng hoạt động thì iPad nó có còn hoạt động hay không? Nó còn hoạt động, đương nhiên nó phải còn hoạt động."
Phần 5: Kết luận và mở rộng:
- Tóm tắt lại phương pháp sử dụng
jti
là giải pháp hiệu quả và an toàn. Nhấn mạnh ưu điểm: không vi phạm nguyên tắc không lưu trữ token trong database. - Đề cập đến kịch bản khác: thay đổi mật khẩu sẽ vô hiệu hóa tất cả các thiết bị đang hoạt động, hứa hẹn sẽ giải quyết trong video tiếp theo.
Tóm lại, video hướng dẫn một kỹ thuật hiệu quả và an toàn để quản lý đăng xuất JWT trên nhiều thiết bị, sử dụng jti
làm chìa khóa để xác định và vô hiệu hóa token cụ thể mà không cần lưu trữ toàn bộ token trong database. Video cũng so sánh các phương pháp khác nhau và nhấn mạnh tầm quan trọng của việc bảo mật secret key
.