Nội dung chính
JWT là gì?
JWT (JSON Web Token) là một tiêu chuẩn mở giúp truyền tải thông tin bảo mật giữa client và server dưới dạng đối tượng JSON được mã hóa. Mỗi JWT chứa các claim – tức là các cặp dữ liệu thể hiện quyền hoặc thông tin của người dùng.
Token này được ký bằng thuật toán mã hóa để đảm bảo tính toàn vẹn, nghĩa là sau khi phát hành, nội dung không thể bị thay đổi nếu không có khóa bí mật phù hợp.

Giải nghĩa từng phần trong tên gọi JSON Web Token
1. JSON
JSON (JavaScript Object Notation) là định dạng văn bản được sử dụng để trao đổi dữ liệu giữa client và server. Dữ liệu trong JSON dễ đọc, dễ phân tích và có thể được xử lý bởi hầu hết các ngôn ngữ lập trình hiện nay.
Từ khi ra đời vào đầu những năm 2000, JSON đã nhanh chóng thay thế XML và trở thành định dạng tiêu chuẩn trong các API web.

2. Token
Token là một chuỗi ký tự đại diện cho một thực thể — chẳng hạn như người dùng hoặc ứng dụng. Trong quá trình xác thực, token cho phép server biết được ai đang gửi yêu cầu.
Khác với các token thông thường, JWT còn chứa thêm claim, dùng để truyền thông tin về người phát hành, thời gian hiệu lực, quyền truy cập,… giúp việc xác thực trở nên rõ ràng và linh hoạt hơn.
Cấu trúc của JSON Web Token
Một JWT gồm ba phần được nối với nhau bằng dấu chấm (.
) và được mã hóa bằng Base64URL. Cấu trúc tổng quát:
Trong đó:
Ví dụ về một JWT:
Phân tách ra ta có:

1. Header
Header (JOSE header) định nghĩa loại token và thuật toán dùng để ký (ví dụ: HMAC, SHA256, RSA…).
Ví dụ:
Sau khi mã hóa Base64URL:
2. Payload
Payload chứa các claim, tức là thông tin mà token truyền tải. Thông thường, JWT chỉ chứa một lượng nhỏ dữ liệu (dưới 10 claim) để giữ token ngắn gọn.
Ba loại claim chính gồm:
-
Registered claim – Các trường tiêu chuẩn (như iat
, exp
, nbf
) giúp xác định thời gian phát hành, hết hạn hoặc thời điểm hiệu lực của token.
Ví dụ:
Mã hóa Base64URL:
3. Signature
Signature được tạo ra bằng cách kết hợp header, payload và một chuỗi bí mật (secret), sau đó mã hóa theo thuật toán đã chọn.
Mục đích của signature là đảm bảo token không bị chỉnh sửa trong quá trình truyền tải.
Ví dụ:
Kết quả:
Cơ chế hoạt động của JWT
-
Người dùng đăng nhập: Client gửi thông tin xác thực (username, password) đến server.
-
Server tạo JWT: Nếu thông tin hợp lệ, server tạo JWT chứa dữ liệu người dùng và gửi về client.
-
Client lưu JWT: Token được lưu trong localStorage hoặc sessionStorage.
-
Gửi yêu cầu: Mỗi khi gửi request, client thêm JWT vào header:
-
Server xác thực: Server kiểm tra chữ ký JWT để xác nhận tính hợp lệ và cấp quyền truy cập tài nguyên.
JWT không cần lưu trạng thái phiên trên server, giúp giảm tải cho hệ thống và tăng tốc độ xử lý.

Lý do nên sử dụng JWT

Khi nào nên sử dụng JWT
1. Xác thực (Authentication)
Sau khi đăng nhập thành công, server tạo JWT và gửi về client. JWT sẽ được sử dụng trong các request kế tiếp để truy cập tài nguyên cần xác thực.
2. Uỷ quyền (Authorization)
JWT có thể chứa thông tin về quyền hạn người dùng. Khi client gửi request, server chỉ cần xác minh token để quyết định có cho phép truy cập hay không.

3. Trao đổi dữ liệu (Data Exchange)
JWT có thể dùng để truyền dữ liệu giữa các hệ thống khác nhau một cách an toàn. Người nhận có thể kiểm tra chữ ký để xác thực tính hợp lệ của dữ liệu.