JWT là gì? Tìm hiểu về JSON Web Token
- MokaDEV
- 11/10/2024
Trong thế giới của lập trình web, đặc biệt là khi làm việc với các API, bảo mật và xác thực người dùng luôn là một trong những yếu tố quan trọng. Một trong những công nghệ hiện đại giúp giải quyết vấn đề này một cách hiệu quả là JWT. Vậy JWT là gì và cách hoạt động của nó như thế nào? Hãy cùng tìm hiểu qua bài viết này.
JWT là gì?
JWT (JSON Web Token) là một tiêu chuẩn mở (RFC 7519) để truyền tải thông tin giữa các bên dưới dạng đối tượng JSON. Thông tin này có thể được xác thực và ký để đảm bảo tính toàn vẹn và bảo mật của dữ liệu.
JWT thường được sử dụng để xác thực người dùng giữa client và server. Thay vì lưu trữ thông tin phiên (session) trên server, tất cả thông tin xác thực sẽ được lưu trong token và gửi kèm theo mỗi request, giúp giảm tải cho server và tăng cường bảo mật.
Cấu trúc của JWT
Một JWT bao gồm 3 phần chính:
- Header
- Payload
- Signature
Mỗi phần sẽ được phân tách bằng dấu chấm (.
).
1. Header
Header chứa thông tin về loại token và thuật toán mã hóa được sử dụng. Ví dụ:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload
Payload chứa các thông tin cần truyền tải, ví dụ: thông tin người dùng, quyền truy cập, thời gian hết hạn, v.v. Payload có thể chứa các thông tin tùy ý, nhưng không nên chứa thông tin nhạy cảm như mật khẩu.
{
"username": "mokadev",
"role": "admin",
"timestamp": 1728629816760,
"iat": 1728629816,
"exp": 1729234616
}
3. Signature
Signature chứa chữ ký của token, được tạo ra bằng cách mã hóa Header và Payload với một secret key. Chữ ký này sẽ được sử dụng để xác thực tính toàn vẹn của token.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
Cách hoạt động của JWT
Khi người dùng đăng nhập vào hệ thống, server sẽ tạo ra một JWT dựa vào thông tin của người dùng và gửi về cho client. Client sẽ lưu trữ token này (thường là trong localStorage hoặc Cookie).
Mỗi khi client thực hiện một request, JWT sẽ được đính kèm theo trong header của request. Server sẽ kiểm tra token này, nếu hợp lệ thì sẽ cho phép request tiếp tục, ngược lại sẽ trả về lỗi.
Quy trình hoạt động của JWT
- Người dùng đăng nhập vào hệ thống.
- Server tạo ra một JWT và gửi về cho client.
- Client lưu trữ token và gửi kèm theo mỗi request.
- Server kiểm tra token, nếu hợp lệ thì cho phép request tiếp tục.
Ưu điểm của JWT
1. Tính linh hoạt
JWT có thể được sử dụng ở nhiều nơi khác nhau như xác thực người dùng, phân quyền, và trao đổi thông tin giữa các hệ thống.
2. Không lưu trạng thái
JWT không cần lưu trạng thái trên server, giúp giảm tải cho server và tăng hiệu suất của hệ thống.
3. Bảo mật
JWT sử dụng chữ ký để xác thực tính toàn vẹn của dữ liệu, giúp ngăn chặn các cuộc tấn công giả mạo. Tuy nhiên JWT không mã hoá dữ liệu mà chỉ xác thực tính toàn vẹn. Cần có cơ chế refesh token và blacklist để đảm bảo an toàn cho hệ thống.
4. Dễ dàng tích hợp
JWT có thể dễ dàng tích hợp với nhiều ngôn ngữ lập trình và framework khác nhau như Node.js, PHP, Java, v.v…
Nhược điểm của JWT
1. Không thể hủy token
Một khi JWT đã được tạo ra và gửi về cho client, không thể hủy token này. Điều này có nghĩa là nếu token bị đánh cắp, người khác có thể sử dụng token này để truy cập vào hệ thống.
2. Kích thước lớn
Do JWT chứa nhiều thông tin, nên kích thước của token sẽ lớn hơn so với các phương pháp xác thực khác như session.
Dùng JWT khi nào?
JWT thường được sử dụng trong các ứng dụng API, Single Page Application (SPA), và các hệ thống phân tán. Nó giúp giảm tải cho server, tăng cường bảo mật và tính linh hoạt cho hệ thống.
Kết luận
JWT là một công nghệ mạnh mẽ giúp giải quyết vấn đề xác thực và phân quyền người dùng một cách hiệu quả. Tuy nhiên, để sử dụng JWT một cách an toàn và hiệu quả, bạn cần hiểu rõ về cấu trúc và cách hoạt động của nó. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về JWT và cách sử dụng nó trong ứng dụng của mình. Chúc bạn thành công!