So sánh khái niệm session vs JWT đã có ở câu riêng — câu này interviewer chờ quyết định cho một hệ cụ thể kèm luồng vận hành. Trả lời bằng khung 3 câu hỏi:
1. Cần thu hồi tức thì không? (ban user, đổi mật khẩu phải logout mọi thiết bị ngay) → nghiêng session/stateful.
2. Bao nhiêu bên tiêu thụ token? Một web app cùng domain → session cookie là đủ; nhiều service/mobile/API cho bên thứ ba → JWT tiện vì mỗi service tự verify chữ ký, không gọi về auth service.
3. Đã có store chia sẻ chưa? Hệ đã chạy Redis sẵn → chi phí "stateful" gần bằng 0, bớt hẳn một lý do chọn JWT.
Áp vào hệ cụ thể:
- App ngân hàng / admin monolith → session cookie (httpOnly + Secure + SameSite): revoke tức thì là yêu cầu cứng, một domain nên cookie tự nhiên.
- Hệ microservice + mobile app → JWT access 10–15 phút + refresh token, và phần "thu hồi" nằm ở refresh:
- Refresh lưu hash trong DB theo phiên/thiết bị → thu hồi được từng thiết bị; access ngắn nên khoảng "không thu hồi được" chỉ tối đa vài phút.
- Rotation: mỗi lần refresh cấp token mới + vô hiệu cái cũ; refresh cũ bị dùng lại → coi là bị đánh cắp, thu hồi cả phiên.
- Logout = xóa bản ghi refresh + xóa cookie; cần ban khẩn cấp → thêm denylist jti hoặc token_version trên user.
Điểm ghi điểm khi trả lời: nói rõ mô hình lai này lấy JWT cho tốc độ verify giữa các service, nhưng giữ quyền thu hồi bằng phần stateful ở refresh token — chứ không phải "JWT thì chịu không logout được".