Authentication Trong REST API Với JWT
Tại sao REST API không dùng Session?
Session-based Authentication (Traditional Web Apps)
Token-based Authentication (REST API)
JWT (JSON Web Token) là gì?
JWT gồm 3 phần, ngăn cách bởi dấu chấm (.):
1. Header (màu đỏ):
2. Payload (màu xanh lá) - JSON Data:
3. Signature (màu xanh dương) - “Password” của JWT:
Tại sao Signature quan trọng?
Signature = “Chữ ký số” chỉ server tạo được (cần SECRET_KEY)
Cài đặt và sử dụng jsonwebtoken
1. Installation
jsonwebtoken là package phổ biến nhất cho JWT trong Node.js:
2. Setup Secret Key
Quy trình Đăng nhập (Login Flow)
1. User Login - Tạo Token
2. Client lưu Token
Nên lưu trong sessionCookie, an toàn hơn localStorage:
3. Verify Token trên
Để kiểm tra token có đúng không:
Sử dụng Token trong REST API Requests
1. Client gửi Token trong Header
2. Cấu hình CORS cho Authorization Header
3. Backend verify Token
4. Sử dụng middleware isAuth
Sử dụng Token để nhận diện User
1. Tạo Post với User ID
2. Chỉ cho phép user xóa post của chính họ
3. Admin có thể xóa bất kỳ post nào
Token Expiration Time Best Practices
Thời gian hết hạn phổ biến
Khuyến nghị:
Refresh Token Pattern (Advanced)
Bảo Mật Token: Rủi ro và Cách Phòng Chống
Bất kỳ ai có được token đều có thể giả danh user đó hoàn toàn.
Token ≈ Username + Password kết hợp
Làm sao Token bị đánh cắp?
1. XSS (Cross-Site Scripting) Attack
Cách XSS xảy ra:
2. Man-in-the-Middle (MITM) Attack
3. Phishing
4. Browser Extension độc hại
Cách Phòng Chống Token Theft
1. HttpOnly Cookies (An toàn hơn localStorage)
localStorage
HttpOnly Cookie
JavaScript đọc được?
✅ Có (XSS nguy hiểm!)
❌ Không (An toàn hơn)
Tự động gửi với requests?
❌ Phải thêm header
✅ Tự động
CSRF protection?
✅ An toàn
⚠️ Cần SameSite
Mobile Apps?
✅ Dễ dùng
❌ Khó hơn
2. Short-lived Access Token + Refresh Token (đã nói ở trên)
3. Token Rotation (Rotate Refresh Token)
4. Device/IP Tracking
5. User có thể quản lý devices/sessions
UI Example:
6. Sanitize User Input (Chống XSS)
7. Content Security Policy (CSP)
Câu trả lời câu hỏi của bạn:
Best practice đơn giản nhất:
Best Practices JWT trong REST API
1. Luôn dùng HTTPS trong Production
2. Secret Key phải mạnh và bảo mật
3. Không lưu sensitive data trong token
4. Validate token mỗi request
5. Handle token expiration gracefully
6. Logout: Invalidate token
7. Rate limiting cho login endpoint
8. Logging và monitoring
9. Multi-device support (Mỗi device 1 token)
10. Environment-specific configurations
Complete Example: Full Auth Flow
Tóm tắt
Khái niệm
Giải thích
Stateless
Server không lưu session, mọi thông tin trong token
JWT
JSON Web Token = Header + Payload + Signature
Signature
“Chữ ký số” chỉ server tạo được (cần SECRET_KEY)
Bearer Token
Format: Authorization: Bearer <token>
isAuth middleware
Verify token trước khi vào protected routes
req.userId
Sau verify, biết user nào đang request
Expiration
7 days (web), 30 days (mobile), 1h (banking)
Best practices
HTTPS, strong secret, validate mọi request, handle expiration
JWT là chuẩn industry cho authentication trong REST APIs - đơn giản, secure, và scalable!
