CoderTools

Bộ Mã Hóa/Giải Mã JWT

Giải mã, xác minh và tạo token JWT một cách an toàn

JWT Đã Giải Mã

Tiêu Đề


                        

Dữ Liệu


                        

Chữ Ký


                        

Hướng dẫn toàn diện về JSON Web Tokens (JWT)

JWT là gì?

JSON Web Token (JWT) là một tiêu chuẩn mở (RFC 7519) xác định một cách nhỏ gọn và khép kín để truyền thông tin an toàn giữa các bên dưới dạng đối tượng JSON. Thông tin này có thể được xác minh và tin cậy vì nó được ký điện tử.

Cấu trúc của một JWT

Một JWT về mặt kỹ thuật bao gồm ba phần được ngăn cách bằng dấu chấm (.), đó là:

xxxxx.yyyyy.zzzzz
  • Tiêu đề (Header) : Thường bao gồm hai phần: loại token (JWT) và thuật toán ký được sử dụng, chẳng hạn như HMAC SHA256 hoặc RSA.
  • Phần tải (Payload) : Chứa các xác nhận quyền sở hữu (claims). Claims là các tuyên bố về một thực thể (thường là người dùng) và dữ liệu bổ sung.
  • Chữ ký (Signature) : Để tạo phần chữ ký, bạn phải lấy tiêu đề đã mã hóa, phần tải đã mã hóa, một bí mật, thuật toán được chỉ định và ký nó.

Các thuật toán được hỗ trợ

Công cụ này hỗ trợ giải mã và xác minh cho tất cả các thuật toán tiêu chuẩn:

  • HS256: HS256 (HMAC SHA-256): Đối xứng. Yêu cầu khóa bí mật chia sẻ.
  • HS384: HS384: Đối xứng. Sử dụng băm 384-bit.
  • HS512: HS512: Đối xứng. An toàn nhất cho chữ ký đối xứng.
  • RS256: RS256 (RSA SHA-256): Bất đối xứng. Khóa riêng để ký, khóa công khai để xác minh.
  • RS384: RS384: Bất đối xứng.
  • RS512: RS512: Bất đối xứng.

Hiểu về JWT Claims

Claims là các mẩu thông tin. Các claims đã đăng ký tiêu chuẩn bao gồm:

  • iss (Issuer): iss (Issuer): Người phát hành.
  • sub (Subject): sub (Subject): Chủ thể (User ID).
  • aud (Audience): aud (Audience): Khán giả/Người nhận.
  • exp (Expiration Time): exp (Expiration): Thời gian hết hạn.
  • nbf (Not Before): nbf (Not Before): Thời gian bắt đầu hiệu lực.
  • iat (Issued At): iat (Issued At): Thời gian phát hành.
  • jti (JWT ID): jti (JWT ID): Định danh duy nhất.

Khi nào nên sử dụng JWT?

  • Ủy quyền (Authorization): Kịch bản phổ biến nhất. Sau khi đăng nhập, mỗi yêu cầu bao gồm JWT để truy cập tài nguyên.
  • Trao đổi thông tin: Truyền thông tin an toàn giữa các bên.
  • Phiên không trạng thái: JWT chứa tất cả dữ liệu người dùng, giảm tải cho cơ sở dữ liệu.
  • SSO Cross-Domain: Lý tưởng cho Đăng nhập một lần giữa các miền.
  • Bảo mật API: Bảo vệ các API RESTful.

Các phương pháp bảo mật tốt nhất: 1. Không đặt dữ liệu nhạy cảm trong payload. 2. Luôn kiểm tra chữ ký. 3. Sử dụng 'exp' để giới hạn tuổi thọ token. 4. Sử dụng HTTPS. 5. Lưu trữ token an toàn (HttpOnly Cookies được khuyến nghị).

Tham khảo

Câu hỏi thường gặp (FAQ)

JWT là mã hóa hay mã hóa (encoding)?

JWT tiêu chuẩn được mã hóa (encoded) và ký, KHÔNG phải mã hóa (encrypted). Payload là Base64Url, ai cũng đọc được. Để ẩn dữ liệu, hãy dùng JWE.

Nên lưu JWT ở đâu trên client?

Cookie `HttpOnly` thường an toàn hơn `localStorage` để chống XSS.

Điều gì xảy ra nếu JWT bị đánh cắp?

Kẻ trộm có thể mạo danh người dùng cho đến khi token hết hạn. Hãy sử dụng thời gian hết hạn ngắn.

Công cụ này có gửi khóa của tôi đến máy chủ không?

Không. Mọi thứ chạy trên trình duyệt của bạn qua JavaScript.

Tôi có thể sửa đổi payload thủ công không?

Được, nhưng chữ ký sẽ không hợp lệ. Máy chủ sẽ từ chối token.

Sự khác biệt giữa HS256 và RS256?

HS256 là đối xứng (khóa chia sẻ). RS256 là bất đối xứng (cặp khóa).

Menu Nhanh

Chưa có công cụ gần đây