🔐 JWT (JSON Web Token): Token hóa hiện đại cho xác thực không trạng thái
Trong hệ thống hiện đại, đặc biệt là kiến trúc vi dịch vụ (microservices) và frontend-backend tách rời (SPA, mobile apps), JWT là một cơ chế phổ biến để truyền tải thông tin xác thực và phân quyền giữa các thành phần hệ thống mà không cần duy trì trạng thái phía máy chủ.
🧩 JWT là gì?
JWT (JSON Web Token) là một token nhỏ gọn, tự chứa, được sử dụng để truyền tải thông tin một cách an toàn dưới dạng JSON, chủ yếu trong các ngữ cảnh:
- Xác thực người dùng (Authentication)
- Phân quyền truy cập (Authorization)
- Trao đổi thông tin an toàn giữa các dịch vụ
🏗 Cấu trúc JWT
JWT bao gồm 3 phần, phân tách bằng dấu . và được mã hóa dưới dạng Base64Url:
plaintext
Copy
Edit
<Header>.<Payload>.<Signature>
📌 1. Header
Chứa metadata như:
json
Copy
Edit
{ "alg": "HS256", "typ": "JWT" }
- alg: Thuật toán ký (HS256, RS256…)
- typ: Loại token, thường là JWT
Bao gồm các claims – dữ liệu định danh hoặc tùy biến. Ví dụ:
json
Copy
Edit
{ "sub": "user123", "iss": "auth.myapp.com", "exp": 1713000000, "roles": ["admin", "editor"] }
- sub: Chủ thể (subject)
- iss: Nhà phát hành (issuer)
- exp: Thời gian hết hạn (epoch timestamp)
- roles, scope: Claims tùy chỉnh
⚠️ Payload không được mã hóa – mọi dữ liệu ở đây có thể bị xem nếu JWT bị lộ.
📌 3. SignatureĐược tạo bằng cách:
plaintext
Copy
Edit
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
- Mục tiêu: đảm bảo tính toàn vẹn – nếu token bị chỉnh sửa, signature sẽ không khớp.
🛠 Cách sử dụng trong hệ thống thực tế
- Client login ⟶ nhận JWT từ server sau khi xác thực.
- Client đính kèm JWT trong header (thường là Authorization: Bearer <token>) cho các request tiếp theo.
- Server xác minh chữ ký và trích xuất thông tin từ claims để xử lý phân quyền.
JWT có thể được xác thực mà không cần truy vấn database/session store, giúp giảm tải và cải thiện hiệu suất.
🔄 JWT vs SAML: So sánh nhanh
Định dạng | JSON | XML |
Nhẹ | ✅ | ❌ |
SSO | Có, nhưng cơ bản | Tối ưu cho SSO |
Hỗ trợ thiết bị di động | ✅ Rất tốt | ❌ Giới hạn |
Dễ tích hợp frontend | ✅ | ❌ |
➡️ Chọn JWT nếu bạn triển khai web/mobile app, microservices, hoặc muốn xác thực nhẹ nhàng, hiệu quả.
➡️ Chọn SAML nếu bạn làm việc trong môi trường doanh nghiệp, cần tích hợp với hệ thống SSO lớn.
🧠 Mẹo thực chiến DevOps
- 🛑 Không tin tưởng nội dung payload nếu bạn không xác minh signature.
- 🔒 Nếu chứa thông tin nhạy cảm (email, vai trò, dữ liệu kinh doanh), hãy mã hóa thêm payload.
- ⏱ JWT nên có exp ngắn hạn (5–15 phút) + refresh token nếu cần kéo dài phiên.
- 🚫 Đừng lưu JWT trong localStorage nếu có thể – nên dùng httpOnly secure cookie để giảm nguy cơ XSS.
🔐 Kết luận
JWT là nền tảng cho xác thực không trạng thái, phù hợp với mô hình phân tán và microservices hiện đại. Tuy nhiên, hiểu rõ giới hạn bảo mật và kiểm soát thời hạn/lưu trữ là điều bắt buộc để khai thác hiệu quả và an toàn trong môi trường DevOps.