Bài viết chia sẻ JWT là gì cách hoạt động của JWT .JWT hoạt động bằng cách tạo ra một token sau khi người dùng đăng nhập thành công. Token này được gửi về trình duyệt và được lưu trữ dưới dạng cookie hoặc trong localStorage. Mỗi lần người dùng thực hiện yêu cầu truy cập tài nguyên, JWT sẽ được gửi kèm trong yêu cầu HTTP để xác thực và cấp quyền truy cập mà không cần phải xác minh lại thông tin đăng nhập từ đầu. Điều này giúp tăng cường hiệu suất và bảo mật cho các ứng dụng web hiện đại.
JWT là gì cách hoạt động của JWT
JWT là gì
JSON Web Token viết tắt là (JWT) là một tiêu chuẩn mã hóa mở (RFC 7519) giúp trao đổi dữ liệu an toàn và đáng tin cậy giữa các bên dưới dạng đối tượng JSON. JWT được sử dụng rộng rãi trong các hệ thống web để xác thực và trao quyền truy cập.
Cấu trúc của JWT
JWT bao gồm ba phần chính, mỗi phần được phân tách bởi dấu chấm (.
):
Header: Phần đầu của JWT, chứa thông tin về thuật toán mã hóa và kiểu token.
{ "alg": "HS256", "typ": "JWT" }
Payload: Phần này chứa các thông tin người dùng (claims) và dữ liệu bổ sung như user ID, thời gian hết hạn, v.v.
{ "sub": "1234567890", "name": "John Doe", "admin": true }
Signature: Phần chữ ký dùng để xác thực nguồn gốc của JWT và đảm bảo tính toàn vẹn của token. Chữ ký được tạo bằng cách mã hóa Header
và Payload
với một khóa bí mật bằng thuật toán đã chỉ định trong phần Header.
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Cách hoạt động của JWT trên Website
Dưới đây là quy trình cơ bản về cách JWT hoạt động để xác thực người dùng trên một website.
Người dùng đăng nhập: Khi người dùng đăng nhập bằng thông tin xác thực (như tên người dùng và mật khẩu), ứng dụng sẽ xác minh thông tin này với cơ sở dữ liệu.
Ứng dụng tạo JWT: Nếu thông tin đăng nhập hợp lệ, ứng dụng tạo ra một JWT bao gồm thông tin người dùng (payload) và ký nó bằng một khóa bí mật (secret key).
Trả về JWT cho người dùng: JWT này sau đó được gửi lại cho người dùng và lưu trữ trên trình duyệt của họ, thường là trong cookies hoặc localStorage.
Người dùng yêu cầu truy cập tài nguyên: Khi người dùng muốn truy cập các tài nguyên được bảo vệ (ví dụ: xem trang cá nhân hoặc thực hiện một hành động), JWT được đính kèm trong tiêu đề Authorization
của yêu cầu HTTP.
Authorization: Bearer <token>
Ứng dụng xác minh JWT: Server nhận yêu cầu và sử dụng khóa bí mật để xác minh JWT đã nhận có hợp lệ hay không (chưa bị sửa đổi và chưa hết hạn).
Cấp quyền truy cập hoặc từ chối: Nếu JWT hợp lệ, server cho phép truy cập tài nguyên yêu cầu. Nếu không, server trả về lỗi (ví dụ: 401 Unauthorized).
Ưu và nhược điểm của JWT
Ưu điểm:
Tính di động: JWT không phụ thuộc vào một định dạng hay nền tảng cụ thể nào, do đó có thể sử dụng trên nhiều nền tảng khác nhau.
Dễ dàng mở rộng: JWT có thể chứa thêm bất kỳ dữ liệu nào trong phần payload mà không cần phải tuân theo một cấu trúc cố định.
Bảo mật: Chữ ký của JWT đảm bảo tính toàn vẹn và tính xác thực của dữ liệu bên trong token.
Nhược điểm:
Kích thước token lớn: Do JWT bao gồm tất cả dữ liệu payload và chữ ký, kích thước của token có thể khá lớn, điều này có thể ảnh hưởng đến hiệu suất mạng.
Không thể thu hồi: Vì JWT không có trạng thái và không lưu trên server, không có cách nào để thu hồi hoặc vô hiệu hóa token sau khi nó được phát hành, ngoại trừ đợi token hết hạn.
Sử dụng JWT an toàn
Để đảm bảo JWT an toàn trong ứng dụng của bạn, bạn nên
Sử dụng HTTPS để bảo mật dữ liệu trong quá trình truyền tải.
Thiết lập thời gian hết hạn hợp lý cho JWT để giảm thiểu rủi ro khi bị đánh cắp.
Sử dụng secret key mạnh và an toàn.
Kiểm tra lỗi một cách an toàn để tránh lộ thông tin chi tiết về JWT không hợp lệ.
Kết lại
JSON Web Token (JWT) là một công cụ mạnh mẽ và hiệu quả để quản lý xác thực và ủy quyền trong các ứng dụng web hiện đại. Bằng cách sử dụng JWT, các nhà phát triển có thể đảm bảo thông tin trao đổi giữa máy khách và máy chủ được bảo mật, đồng thời giảm bớt tải cho máy chủ nhờ tính chất không trạng thái (stateless). Điều này giúp cải thiện hiệu suất của ứng dụng và mang lại trải nghiệm mượt mà hơn cho người dùng. Tuy nhiên, để đảm bảo an toàn cho hệ thống, cần phải thực hiện các biện pháp bảo mật phù hợp như sử dụng HTTPS, quản lý thời gian sống của token (expiration), và bảo vệ JWT khỏi các cuộc tấn công tiêm độc (injection) hay lừa đảo (phishing).