Checkpoint: refresh token và phân quyền
Quiz
- Vì sao access token (JWT) nên sống ngắn, khoảng 5 đến 15 phút?
- Vì JWT có kích thước lớn, sống lâu sẽ làm chậm mọi request.
- Vì JWT không thu hồi được trước khi hết hạn, nên nếu bị lộ thì thiệt hại chỉ kéo dài trong khoảng thời gian ngắn đó.
- Vì database chỉ lưu được access token trong 15 phút.
- Vì trình duyệt tự xóa token sau 15 phút.
- Server nên lưu refresh token trong database dưới dạng nào?
- Mã hóa bằng khóa công khai của client.
- Chỉ lưu thời hạn hết hạn, không lưu giá trị token.
- Hash của token, để lộ database cũng không dùng lại được token.
- Plaintext, để dễ đối chiếu khi client gửi lên.
- Một refresh token đã bị đánh dấu là đã dùng mà lại xuất hiện trong một yêu cầu refresh. Server nên xử lý thế nào?
- Chỉ trả 403 vì user đã xác thực nhưng thiếu quyền.
- Bỏ qua vì token vẫn còn hạn, cấp cặp token mới bình thường.
- Xóa bản ghi token đó rồi cấp lại token mới cho user.
- Thu hồi cả family, ghi log sự kiện reuse, trả 401 và buộc đăng nhập lại.
- Sự kiện nào sau đây bắt buộc phải thu hồi refresh token (và thường là cả family)?
- Người dùng đăng nhập trên một thiết bị mới.
- Người dùng mở app sau nhiều giờ không dùng.
- Người dùng đổi hoặc đặt lại mật khẩu.
- Access token vừa hết hạn và được cấp mới.
- Đoạn route sau sai ở đâu?
app.delete('/orders/:id', requireRole('admin'), requireAuth, deleteOrder);
- Không có lỗi, thứ tự middleware không quan trọng.
- Thiếu middleware kiểm tra CORS trước requireAuth.
- Phải dùng requireRole('member') vì admin không được xóa đơn hàng.
- requireRole chạy trước requireAuth nên req.user chưa tồn tại, và route còn thiếu kiểm tra quyền sở hữu tài nguyên.
- Một admin vừa bị hạ quyền nhưng access token của họ còn hạn 12 phút. Với API xóa dữ liệu nhạy cảm, hướng xử lý nào phù hợp nhất?
- Yêu cầu client gửi kèm role mới trong request body để server kiểm tra.
- Đọc lại role từ database ngay trong request đó (hoặc dùng claim role_version) trước khi cho phép hành động nhạy cảm.
- Chấp nhận role cũ trong token vì token chỉ còn 12 phút.
- Ẩn nút xóa trên giao diện của user đó là đủ.
- Kỹ thuật trong đó mỗi lần refresh thì refresh token cũ bị vô hiệu và một token mới được cấp, gọi là ____.
- Khi đã xác thực thành công nhưng vai trò của user không đủ quyền cho hành động, API nên trả mã HTTP ____.
- Nguyên tắc trong đó route không khai báo quyền thì mặc định bị chặn, chỉ mở khi có cho phép rõ ràng, gọi là ____ by default.
- Hãy tự đánh giá: bạn có vẽ lại được bằng lời luồng cấp mới token (client gọi /auth/refresh, server tra hash trong database, kiểm tra trạng thái, cấp cặp token mới) và chỉ ra chỗ nào cần chặn truy cập sai vai trò không?
Sign in to submit answers.