Công cụ này làm gì
Công cụ này giải mã một JSON Web Token (JWT) để bạn đọc được header và payload mà không cần bất kỳ khóa nào, và tùy chọn xác minh chữ ký nếu bạn cung cấp đúng secret hoặc public key. Dán một token vào, bạn sẽ thấy ngay header đã giải mã, các claim bên trong payload, cùng các badge cho biết token đã hết hạn hay chưa có hiệu lực — tất cả được tính dựa trên đồng hồ của chính thiết bị bạn.
Mọi thứ chạy ngay trên thiết bị thông qua WebAssembly. Không có server nào tham gia vào việc giải mã hay xác minh, điều này quan trọng vì một JWT thường mang theo dữ liệu phiên đăng nhập hoặc định danh mà bạn không muốn để lộ qua backend của bên thứ ba chỉ để xem thử.
Cấu trúc của một token
Một JWT gồm ba đoạn được mã hóa base64url nối với nhau bằng dấu chấm: header, payload và signature — viết dưới dạng header.payload.signature. Header nêu tên thuật toán ký và loại token; payload chứa các claim (như subject, thời điểm hết hạn, hoặc dữ liệu tùy ứng dụng); signature là phần mà bên xác minh kiểm tra để xác nhận hai đoạn đầu chưa bị chỉnh sửa.
// Payload đã giải mã, ví dụ
{
"sub": "1234567890",
"name": "Ada Lovelace",
"exp": 1735689600
}
Giải mã và xác minh khác nhau thế nào
Đây là hai bước riêng biệt, và sự khác biệt này rất quan trọng. Giải mã chuyển header và payload dạng base64url trở lại thành JSON đọc được — không cần khóa, và hoạt động với bất kỳ token đúng định dạng nào, dù thật hay giả mạo. Xác minh tính lại chữ ký bằng một secret (HS256) hoặc đối chiếu với một public key (RS256, ES256) và xác nhận nó khớp với phần đính kèm trong token. Chỉ khi xác minh thành công bạn mới biết chắc token thực sự do bên nắm giữ khóa đó phát hành và chưa bị can thiệp kể từ đó.
Nên chọn thuật toán nào?
| Thuật toán | Loại khóa | Cách xác minh hoạt động |
|---|---|---|
| HS256 | Secret dùng chung (HMAC) | Cùng một secret đã ký token được dùng để tính lại chữ ký — cả bên phát hành lẫn bên xác minh đều phải nắm giữ nó |
| RS256 | Cặp khóa RSA | Bên phát hành ký bằng private key; bạn xác minh bằng public key tương ứng, vốn an toàn để chia sẻ |
| ES256 | Cặp khóa đường cong elliptic (P-256) | Cùng cơ chế public/private như RS256, dùng ECDSA trên đường cong P-256 cho chữ ký nhỏ gọn hơn |
Hãy dùng đúng thuật toán mà token thực sự được phát hành — việc xác minh chỉ thành công với đúng khóa dành cho thuật toán cụ thể đó, không phải bất kỳ khóa nào bạn đang có.
Vì sao alg: none bị từ chối
Một số ít thư viện xử lý JWT trước đây từng coi thuật toán none là "hợp lệ, không cần chữ ký", nghĩa là bất kỳ ai cũng có thể tạo ra một token với claim tùy ý và khiến nó được chấp nhận như thật — đây là một dạng lỗ hổng JWT đã được ghi nhận rộng rãi trong thực tế. Công cụ này luôn coi alg: none là xác minh thất bại thay vì hợp lệ, nên việc dán một token chưa ký vào đây sẽ không bao giờ cho ra kết quả "hợp lệ" gây hiểu lầm.
Token của bạn không bao giờ rời khỏi thiết bị
Văn bản token, cùng bất kỳ secret hay public key nào bạn nhập để xác minh, được xử lý hoàn toàn bên trong một module WebAssembly chạy trong tab trình duyệt của bạn. Không có gì được tải lên, ghi log hay gửi tới server — đóng tab là mọi thứ biến mất, vì ngay từ đầu đã không có request mạng nào mang token của bạn đi cả.
Nếu bạn cần thiết lập xác thực hai yếu tố, xem Tạo mã TOTP & Thiết lập 2FA. Nếu bạn cần một cặp khóa mới để ký token bằng RS256 hoặc ES256 ở nơi khác, xem Tạo cặp khóa — cả hai đều xử lý ngay trên thiết bị giống như công cụ này.