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:
50+ million downloads/week 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:
Copy token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Paste token vào ô “Encoded” Paste secret key vào ô “Verify Signature” Decoded payload có đúng userId, email không? “Signature Verified” có hiện 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ị:
Mobile Apps: 30 days (user ít login lại) Banking/Financial: 1-2 hours 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
Không cần nhập lại password Làm sao Token bị đánh cắp?
1. XSS (Cross-Site Scripting) Attack
Cách XSS xảy ra:
Comment section không sanitize input User profile bio cho phép HTML Third-party scripts bị compromise 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)
2. Short-lived Access Token + Refresh Token (đã nói ở trên)
Access token ngắn (15 phút) → Bị đánh cắp cũng ít thiệt hại Refresh token dài (7 ngày) → Lưu httpOnly cookie (an toàn) Nếu access token bị hack → 15 phút sau hết hạn User không phải login lại liên tục 3. Token Rotation (Rotate Refresh Token)
Old refresh token chỉ dùng được 1 lần Nếu hacker dùng old token → Server biết ngay có vấn đề Có thể revoke tất cả tokens của user 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:
✅ Đúng - Ai có token = Giả danh được user ✅ Đúng - User phải tự quản lý token trên mỗi device ✅ Giải pháp - HttpOnly cookies + Short expiration + Device management + Security alerts Best practice đơn giản nhất:
Access Token: 15 phút (localStorage OK) Refresh Token: 7 ngày (httpOnly cookie) User có thể xem và revoke sessions HTTPS bắt buộc trong production 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
JWT là chuẩn industry cho authentication trong REST APIs - đơn giản, secure, và scalable!