Hướng dẫn cách làm
Cách giải mã JWT mà không làm lộ token
Một JSON Web Token mang dữ liệu thật: người dùng mà nó được cấp cho, các quyền nó trao, và thời điểm hết hạn. Dán nó vào một trình giải mã trực tuyến bất kỳ nghĩa là trao dữ liệu đó, và thường là cả một phiên vẫn còn hiệu lực, cho một máy chủ bạn không kiểm soát. Trình giải mã bên dưới chạy hoàn toàn trong trình duyệt của bạn, nên bạn có thể đọc nội dung bên trong token, kiểm tra xem nó đã hết hạn chưa, và xác nhận chữ ký HMAC khi bạn biết khóa bí mật, tất cả mà không một yêu cầu mạng nào rời khỏi tab của bạn.
Từng bước
- Mở trình giải mã JWT và dán token của bạn vào ô nhập. Một JWT gồm ba phần mã hóa Base64Url nối với nhau bằng dấu chấm: header, payload và chữ ký. Bạn có thể dán kèm tiền tố Bearer hoặc không; công cụ đọc được cấu trúc trong cả hai trường hợp và báo ngay nếu định dạng sai.
- Đọc header và payload đã giải mã. Header cho thấy thuật toán ký (ví dụ HS256 hoặc RS256) và mã khóa khi có. Payload liệt kê các claim: token dành cho ai (sub), ai phát hành (iss), và các mốc thời gian. Công cụ chuyển các trường số iat, nbf và exp thành ngày dễ đọc và đánh dấu token còn hiệu lực hay đã hết hạn.

- Nếu token dùng HS256 và bạn giữ khóa bí mật chung, hãy dán khóa đó vào ô xác minh rồi bấm Xác minh. Công cụ tính lại HMAC trên header và payload rồi so với chữ ký, nhờ đó bạn biết token là thật hay đã bị sửa đổi. Với token RS256 hoặc ES256, việc ký dùng một khóa riêng mà bạn không có, nên công cụ chỉ xem xét các claim chứ không tự nhận là xác minh được chữ ký.

Vì sao đừng bao giờ dán token vào một trang bất kỳ
JWT không được mã hóa. Header và payload chỉ được mã hóa Base64Url, nghĩa là bất kỳ ai nhận được token đều đọc được mọi claim bên trong: email, ID người dùng, vai trò, các cờ nội bộ. Nếu đó là access token chưa hết hạn, ai giữ nó cũng có thể phát lại và hành động thay bạn cho đến khi nó hết hạn. Khi bạn dán một token còn sống vào trình giải mã đặt trên máy chủ, bạn gửi tất cả những thứ đó vào nhật ký của máy chủ ấy. Giải mã token ngay trên máy của bạn, không tải lên, là cách duy nhất để xem xét nó mà không mở rộng số người có thể thấy nó. Bạn có thể xác nhận không có lưu lượng nào bằng cách mở bảng mạng trong lúc giải mã.
Chữ ký nói cho bạn điều gì và không nói được điều gì
Chữ ký là thứ ngăn ai đó sửa các claim mà thoát được. Với token HS256, cùng một khóa bí mật vừa ký vừa xác minh, nên nếu biết khóa bạn có thể xác nhận đầy đủ token là thật ngay tại đây. Với token RS256 và ES256, một khóa riêng ký token và chỉ khóa công khai tương ứng mới xác minh được; khóa riêng không bao giờ rời bên phát hành, nên công cụ phía máy khách đọc được các claim nhưng không thể chứng minh chữ ký một cách trung thực nếu thiếu khóa công khai đó. Hãy coi payload đã giải mã là một tuyên bố của bên phát hành, chứ không phải bằng chứng, cho đến khi chữ ký được kiểm bởi người sở hữu khóa xác minh. Để băm hoặc so sánh khóa bí mật riêng rẽ, trình tạo hash trên trang này cũng chạy ngay trên máy.
Cấu trúc JWT và những gì mỗi phần tiết lộ
JWT là ba phân đoạn được mã hóa Base64url được phân tách bằng dấu chấm: header, payload và signature. Header khai báo loại token ("JWT") và thuật toán: HS256 (HMAC-SHA-256, bí mật chia sẻ) hoặc RS256 (RSA-SHA-256, cặp khóa công khai/riêng tư) là phổ biến nhất. Payload mang các claims như `sub` (đối tượng, thường là ID người dùng), `iat` (Unix timestamp được phát hành), `exp` (Unix timestamp hết hạn), `aud` (đối tượng dự định), và các claims ứng dụng tùy chỉnh như vai trò hoặc phạm vi. Base64url không phải là mã hóa: đây là biến thể an toàn URL của Base64 thay thế `+` bằng `-` và `/` bằng `_`, và bỏ qua padding. Bất kỳ ai giữ chuỗi token thô đều có thể giải mã header và payload mà không cần khóa ký. Chỉ phân đoạn signature mới yêu cầu khóa để xác minh. Đây là lý do tại sao việc dán token sản xuất trực tiếp vào bộ giải mã trực tuyến bên ngoài là rủi ro bảo mật: nếu `exp` của token vẫn còn trong tương lai và dịch vụ ghi lại đầu vào, phiên mà nó đại diện có thể bị xâm phạm.
Các công cụ dùng trong hướng dẫn này
Câu hỏi thường gặp
Token của tôi có bị gửi tới máy chủ nào khi giải mã không?
Không. Trình giải mã tách token, giải mã Base64Url phần header và payload, rồi hiển thị chúng trong bộ nhớ. Bước kiểm HMAC tùy chọn dùng Web Crypto API tích hợp sẵn của trình duyệt. Không có gì đi qua mạng, điều này quan trọng vì JWT thường chứa dữ liệu cá nhân và một phiên vẫn còn sống. Hãy mở bảng mạng của trình duyệt trong lúc giải mã và bạn sẽ thấy không có yêu cầu nào đi ra.
Công cụ này có xác minh được chữ ký RS256 hoặc ES256 không?
Không hoàn toàn, và nó sẽ không giả vờ làm được. HS256 dùng một khóa bí mật chung cho cả ký lẫn xác minh, nên dán khóa đó vào sẽ cho công cụ xác nhận chữ ký ngay trong trình duyệt. RS256 và ES256 dùng khóa riêng để ký và một khóa công khai riêng để xác minh; công cụ đọc và kiểm các claim cùng hạn dùng nhưng dừng lại trước việc khẳng định một chữ ký mà nó không thể kiểm. Với các token đó, hãy xác minh trên dịch vụ đang giữ khóa công khai.