Trong kỷ nguyên của các ứng dụng di động và Single Page App (SPA), việc xây dựng một API RESTful mạnh mẽ và bảo mật là kỹ năng bắt buộc đối với mọi Backend Developer.
Nhưng làm thế nào để đảm bảo rằng chỉ những người dùng hợp lệ mới có quyền truy cập vào dữ liệu nhạy cảm? Câu trả lời chính là JWT (JSON Web Token). Hãy cùng tìm hiểu kiến trúc và cách triển khai nó ngay sau đây.
1. RESTful API là gì? Các nguyên tắc thiết kế chuẩn
REST (Representational State Transfer) là một kiểu kiến trúc phần mềm dựa trên các tài nguyên (Resources). Mỗi tài nguyên được xác định bởi một URL duy nhất.
Để giao tiếp với API, chúng ta sử dụng các phương thức HTTP chuẩn:
* GET /users: Lấy danh sách người dùng.
* POST /users: Tạo người dùng mới.
* PUT /users/:id: Cập nhật thông tin người dùng.
* DELETE /users/:id: Xóa người dùng.
2. Hiểu về cơ chế xác thực JWT (JSON Web Token)
Khác với cơ chế Session truyền thống (lưu trên Server), JWT là cơ chế xác thực không trạng thái (stateless). Token sẽ được lưu trữ phía Client (thường là LocalStorage hoặc Cookie).
Một chuỗi JWT gồm 3 phần: Header.Payload.Signature. Signature giúp Server đảm bảo rằng dữ liệu trong Payload không bị thay đổi bởi kẻ xấu.
3. Quy trình đăng nhập và cấp quyền với JWT
Đây là cách một hệ thống bảo mật hiện đại vận hành:

- Login: Người dùng gửi Username/Password.
- Generate Token: Server kiểm tra, nếu đúng sẽ tạo một JWT và gửi về cho Client.
- Protected Request: Client gửi Token kèm theo trong Header
Authorization: Bearer <token> mỗi khi gọi API cần bảo mật.
- Verify: Server dùng Secret Key để giải mã và kiểm tra Token. Nếu hợp lệ, yêu cầu sẽ được thực thi.
4. Các lớp bảo mật API quan trọng khác
Chỉ có JWT là chưa đủ. Bạn cần thiết lập nhiều “lớp phòng thủ” khác nhau cho API của mình.

- Cors: Kiểm soát những domain nào được phép gọi API của bạn.
- Helmet: Tự động thiết lập các HTTP Header bảo mật để tránh tấn công XSS, Clickjacking.
- Rate Limiting: Giới hạn số lượng yêu cầu trong một khoảng thời gian để tránh bị Spam hoặc tấn công DDoS.
API của bạn đã bảo mật và chuyên nghiệp hơn rất nhiều. Nhưng trong thực tế, người dùng không chỉ gửi dữ liệu dạng text, họ còn cần gửi ảnh đại diện, File PDF hay các tài liệu khác.
Bài tiếp theo chúng ta sẽ tìm hiểu cách Xử lý File Upload trong Node.js bằng thư viện Multer.
👉 Xử lý File Upload & lưu trữ trong Node.js chuyên nghiệp
Đón xem bài tiếp theo: Xử lý File chuyên sâu: Cách xây dựng tính năng Upload Ảnh và Tài liệu cực nhanh với Multer!**