TopDev

JWT là gì? Các thành phần và chức năng của JWT

minhdev 📖 3 phút đọc

JWT (JSON Web Token) là một tiêu chuẩn mã hóa dạng chuỗi JSON, được sử dụng để truyền tải thông tin an toàn giữa các bên trong một hệ thống phân tán, đặc biệt là các ứng dụng web. JWT thường được sử dụng trong xác thực người dùng và trao quyền truy cập.



1. Các thành phần của JWT#

JWT được chia thành ba phần chính, được ngăn cách bởi dấu chấm (.):

a. Header

  • Chứa metadata về loại token và thuật toán mã hóa.

  • Ví dụ: { "alg": "HS256", "typ": "JWT" } Sau khi mã hóa Base64, sẽ thành: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

b. Payload

  • Chứa dữ liệu hoặc thông tin (claims) về người dùng hoặc hệ thống.
    Claims có thể là: Registered claims (Đã định nghĩa trước): Ví dụ iss (issuer), exp (expiry), sub (subject).

    • Public claims: Được định nghĩa theo ý riêng, ví dụ userId, role.

    • Private claims: Dùng trong nội bộ giữa hai bên.

  • Ví dụ: { "sub": "1234567890", "name": "John Doe", "admin": true } Sau khi mã hóa Base64, sẽ thành: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

c. Signature

  • Được tạo bằng cách kết hợp: HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )

  • Phần này đảm bảo tính toàn vẹn của token.

  • Ví dụ: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



2. Đặc điểm và chức năng của JWT#

a. Đặc điểm

  • JWT được mã hóa bằng Base64 nhưng không phải mã hóa bảo mật, nghĩa là nội dung payload có thể đọc được.

  • Được sử dụng với một secret key để xác minh tính toàn vẹn (chống giả mạo).

b. Chức năng

  • Xác thực người dùng (Authentication): Sau khi đăng nhập thành công, server sẽ tạo JWT và trả về cho client.

    • Client sử dụng JWT để truy cập tài nguyên (thông qua header Authorization: Bearer <JWT>).
  • Trao quyền truy cập (Authorization): Server kiểm tra thông tin trong payload (role, permissions) để xác định quyền của người dùng.

  • Trao đổi thông tin an toàn: JWT có thể chứa dữ liệu cần truyền giữa các hệ thống mà không cần kết nối liên tục với server.



3. Ưu và nhược điểm của JWT#

Ưu điểm

  • Stateless: Server không cần lưu trữ thông tin trạng thái của người dùng (giảm tải cho server).

  • Khả năng mở rộng: Dễ dàng tích hợp vào các hệ thống phân tán.

  • Bảo mật: Signature đảm bảo token không bị thay đổi.

Nhược điểm

  • Không thể thu hồi (revoke): Nếu không dùng các kỹ thuật bổ sung (như blacklist).

  • Kích thước lớn hơn: So với session token thông thường do chứa cả header và payload.

  • Payload không mã hóa: Dữ liệu nhạy cảm có thể bị đọc nếu token rơi vào tay kẻ tấn công.



4. Ví dụ một JWT hoàn chỉnh#

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



5. Khi nào nên dùng JWT#

  • Xác thực và phân quyền trong ứng dụng web/mobile.

  • Giao tiếp giữa các dịch vụ microservices.

  • Trao đổi dữ liệu an toàn giữa các bên.

Bạn cần tìm hiểu thêm về cách triển khai JWT không?

Bài liên quan trong #Tin tức

✓ Đã sao chép link