JWT (JSON Web Token) là một tiêu chuẩn mở được IETF định nghĩa trong RFC 7519 (RFC 7515 mô tả dạng chữ ký JWS, RFC 7516 mô tả mã hóa JWE, RFC 7517 định nghĩa khóa JWK) để truyền an toàn thông tin người dùng 'đã khai báo' giữa các yêu cầu HTTP, luồng OIDC và cuộc gọi vi dịch vụ. Một chuỗi JWT tiêu chuẩn bao gồm ba đoạn được mã hóa Base64URL: Header (thuật toán và loại), Payload (Claims, dữ liệu người dùng) và Signature (chữ ký dựa trên khóa trên hai đoạn đầu). Ba đoạn được nối bằng dấu chấm `.`, ví dụ `eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`.
**JWT không phải là mã hóa.** Đây là hiểu lầm phổ biến nhất. Payload theo mặc định là văn bản thuần — bất kỳ ai cũng có thể giải mã Base64URL và đọc nội dung. JWT cung cấp **phát hiện giả mạo**, không phải bảo mật: máy chủ ký lại Header.Payload bằng khóa chia sẻ và so sánh với Signature của token. Nếu khớp, token không bị thay đổi trong quá trình truyền. Đây là phép ẩn dụ 'vé tàu có dấu chống giả': thanh tra quan tâm vé có thật không, không phải mã QR có đọc được không.
JWT phân chia trách nhiệm rõ ràng giữa 13 thuật toán. **Họ HMAC** (HS256/HS384/HS512) sử dụng khóa đối xứng để ký và xác minh, nhanh và đơn giản, phù hợp với một dịch vụ hoặc cụm đáng tin cậy; secret phải có ít nhất độ dài digest (ví dụ: ≥ 32 byte cho HS256). **Họ RSA** (RS256/RS384/RS512) sử dụng RSASSA-PKCS1-v1_5, lược đồ bất đối xứng phổ biến nhất — người ký có khóa riêng, người xác minh có khóa công khai. **Họ RSA-PSS** (PS256/PS384/PS512) sử dụng padding RSA-PSS mới hơn với đảm bảo bảo mật mạnh hơn, được AWS SigV4 và các nhà cung cấp danh tính OIDC hiện đại ưu tiên. **Họ ECDSA** (ES256/ES384/ES512) sử dụng đường cong elliptic (P-256/P-384/P-521 tương ứng) với chữ ký ngắn hơn và hiệu suất tốt hơn. **EdDSA** (chủ yếu là Ed25519) cực kỳ nhanh và tất định (cùng thông điệp + cùng khóa = cùng chữ ký mỗi lần) và là thuật toán được khuyến nghị trong OAuth 2.1 và các giao thức mới.
Bảo mật là nơi JWT vấp ngã trong production. OWASP JWT Cheat Sheet liệt kê ít nhất bốn quy tắc cứng: (1) không bao giờ đặt mật khẩu, giấy tờ tùy thân quốc gia, số thẻ hoặc khóa API dưới dạng văn bản thuần trong Payload; (2) máy chủ phải **không bao giờ tin tưởng trường alg** được khai báo trong Header của Token — phải xác minh bằng thuật toán được mã hóa cứng, nếu không kẻ tấn công viết lại tiêu đề thành `alg: none` sẽ vượt qua tất cả (đây là nguồn gốc của các CVE lịch sử như CVE-2015-9235); (3) secret HMAC phải ngẫu nhiên và có ít nhất 32 byte, không bao giờ là chuỗi ngắn; (4) xác minh không chỉ là kiểm tra chữ ký — bạn cũng phải xác thực `exp` (hết hạn), `nbf` (not-before), `iss` (người phát hành) và `aud` (đối tượng). Công cụ này tô sáng từng Claims này trong UI để bạn có thể nói ngay lập tức sự cố là vấn đề chữ ký, vấn đề thời gian hay vấn đề Claims.
JWT không thay thế phiên. Phiên lưu trữ trạng thái người dùng trên máy chủ (Redis hoặc cơ sở dữ liệu); JWT đóng gói trạng thái vào token. Kiến trúc vi dịch vụ, API không trạng thái, ứng dụng khách di động và cấu hình có nhiều CORS được hưởng lợi từ JWT; hệ thống doanh nghiệp truyền thống và luồng yêu cầu thu hồi ngay lập tức (ví dụ: 'đá người dùng này ngay bây giờ') vẫn được phục vụ tốt hơn bởi phiên. Công cụ này bao gồm cả gỡ lỗi JWT thuần túy và các bước phân tích Token / xác minh chữ ký / sửa Payload của việc di chuyển từ phiên sang JWT.