Kiểm tra token từ nhà cung cấp xác thực
Auth0, Firebase, Keycloak, AWS Cognito đều trả về JWT sau khi đăng nhập. Dán access_token để xem ứng dụng của bạn thực sự nhận được những claim nào — user ID là gì, có scope nào, hết hạn khi nào?
Giải mã bất kỳ JSON Web Token nào để xem header, payload và chữ ký — hoặc ký token mới với HS256/384/512. Xác minh chữ ký HMAC ngay tại máy. 100% trong trình duyệt của bạn.
Giải mã bất kỳ JSON Web Token nào để xem header, payload và chữ ký — hoặc ký token mới với HS256/384/512. Xác minh chữ ký HMAC ngay tại máy. 100% trong trình duyệt của bạn.
Không. Toàn bộ công cụ là JavaScript chạy trong trang này. Bạn dán token, việc giải mã diễn ra trong trình duyệt, dữ liệu không rời khỏi tab. Mở DevTools → Network và quan sát — không có yêu cầu nào được gửi đi khi giải mã hay xác minh. Vì vậy hoàn toàn an toàn để dán token thật của khách hàng hay môi trường production.
Nó chứng minh token được ký bởi người nắm giữ secret (HMAC) hoặc khóa riêng (RSA/ECDSA). Nó KHÔNG mã hóa payload — header và payload chỉ là JSON được mã base64url, ai có token đều đọc được. Chữ ký chỉ ngăn việc giả mạo: chỉ cần đổi một byte trong payload thì chữ ký sẽ không khớp nữa.
Một JWT thường mang theo user ID, email, scope, đôi khi tương đương cookie phiên — chính là dữ liệu KHÔNG được dán vào server của người lạ. Bộ giải mã của iKit chạy bằng JavaScript đã được tải sẵn trong tab trình duyệt. Có thể kiểm chứng qua DevTools → Network: không fetch, không XHR, không beacon trong lúc giải mã hay xác minh.
Với token HS256/384/512, nhập secret ký để xác minh chữ ký ngay tại máy. Với RS256/ES256 (RSA/ECDSA), hãy dùng thư viện phía server — xác minh khóa công khai cần file PEM mà công cụ này không nhận.
HS256 cần ít nhất 32 byte (256 bit) để đạt độ mạnh mật mã thực sự. Bất kỳ giá trị nào cũng dùng được khi thử nghiệm, nhưng môi trường production nên dùng secret ngẫu nhiên đủ dài.
Cách nhanh nhất để gỡ lỗi JWT — không tải lên, không đăng ký, không có bên thứ ba xen giữa bạn và token.
Dán JWT, xem header, payload và chữ ký đã giải mã cạnh nhau. Các claim tiêu chuẩn (iss, sub, aud, exp, iat) được gắn nhãn và hiển thị thời gian rõ ràng.
Với token HS256/384/512, nhập secret để xác minh chữ ký bằng Web Crypto API của trình duyệt. Secret không bao giờ rời khỏi tab.
Chuyển sang chế độ Mã hóa, chỉnh header và payload dạng JSON, chọn thuật toán, nhập secret, và nhận token đã ký ngay lập tức.
Payload của JWT thường chứa user ID, email, đôi khi cả scope — đừng bao giờ dán vào công cụ phía server. Bộ giải mã của iKit chạy bằng JavaScript trong trình duyệt. Có thể kiểm chứng qua DevTools → Network.
Các claim tiêu chuẩn như exp, nbf, iat được làm nổi với ngày giờ dễ đọc cùng nhãn ĐÃ HẾT HẠN / hợp lệ rõ ràng để bạn biết ngay token còn dùng được hay không.
Xây trên Web Crypto API và bộ phân tích JSON gốc của trình duyệt — cùng thuật toán với OpenSSL, libjwt, jose. Hành vi khớp với mọi thư viện JWT hiện đại.
Một JWT là ba đoạn JSON mã base64url ngăn cách bởi dấu chấm — chỉ vậy thôi.
Một JWT có dạng aaa.bbb.ccc. Chúng tôi tách theo hai dấu chấm để lấy header, payload và chữ ký đã mã hóa. Nếu không có đúng ba phần thì token bị lỗi định dạng.
Header và payload là JSON UTF-8 mã base64url. Base64URL = Base64 với -/_ thay cho +//= và không có padding. Chúng tôi thay ký tự về dạng gốc rồi atob, sau đó JSON.parse chuỗi kết quả.
Header cho biết thuật toán (alg: HS256, RS256, v.v.) và loại. Payload chứa các claim — claim tiêu chuẩn (iss, sub, aud, exp, iat, nbf, jti) cộng với các trường tùy chỉnh. Mỗi giá trị được hiển thị trong một mục có nhãn rõ ràng.
Với HS256/384/512, chúng tôi tính lại HMAC của header.payload bằng secret bạn nhập rồi so với chữ ký ở phần thứ ba. Tương đương HMAC(SHA-256, secret, signing_input) mã base64url. Khớp = chữ ký hợp lệ.
Các tình huống thực tế khi bạn cần một bộ giải mã JWT.
Auth0, Firebase, Keycloak, AWS Cognito đều trả về JWT sau khi đăng nhập. Dán access_token để xem ứng dụng của bạn thực sự nhận được những claim nào — user ID là gì, có scope nào, hết hạn khi nào?
API từ chối yêu cầu của bạn? Giải mã token để kiểm tra: đã hết hạn chưa (exp đã qua)? Claim audience (aud) có đúng với API mong đợi không? Issuer (iss) có phải tenant đúng không?
Stripe, GitHub Apps, Slack gửi payload webhook được ký dưới dạng JWT. Sau khi nhận, dán vào chế độ Giải mã cùng secret chung để xác nhận yêu cầu thật sự đến từ họ.
Cần một JWT đã ký mới cho integration test? Chuyển sang chế độ Mã hóa, chỉnh payload (user ID tùy chọn, hạn dùng tùy chọn), chọn HS256 + secret thử nghiệm, có ngay token trong tích tắc. Không cần round-trip qua backend.
Một JWT thường mang theo user ID, email, scope, đôi khi tương đương cookie phiên — chính là dữ liệu KHÔNG được dán vào server của người lạ. Bộ giải mã của iKit chạy bằng JavaScript đã được tải sẵn trong tab trình duyệt. Có thể kiểm chứng qua DevTools → Network: không fetch, không XHR, không beacon trong lúc giải mã hay xác minh.
Hướng dẫn chi tiết và so sánh công cụ từ blog iKit.
JWT segments are base64url-encoded JSON — understand the encoding before you debug a token.
JWT signatures are HMAC-SHA hashes — the same family of cryptographic hashes used to verify file integrity.
Không. Toàn bộ công cụ là JavaScript chạy trong trang này. Bạn dán token, việc giải mã diễn ra trong trình duyệt, dữ liệu không rời khỏi tab. Mở DevTools → Network và quan sát — không có yêu cầu nào được gửi đi khi giải mã hay xác minh. Vì vậy hoàn toàn an toàn để dán token thật của khách hàng hay môi trường production.
Nó chứng minh token được ký bởi người nắm giữ secret (HMAC) hoặc khóa riêng (RSA/ECDSA). Nó KHÔNG mã hóa payload — header và payload chỉ là JSON được mã base64url, ai có token đều đọc được. Chữ ký chỉ ngăn việc giả mạo: chỉ cần đổi một byte trong payload thì chữ ký sẽ không khớp nữa.
Ba nguyên nhân thường gặp: (1) sai secret — secret của JWT phân biệt hoa thường và bất kỳ khoảng trắng thừa nào cũng làm hỏng xác minh. (2) Lệch thuật toán — header ghi HS256 nhưng secret ban đầu lại được dùng với HS512. (3) Token bị sửa sau khi ký — chỉ một byte cũng làm hỏng chữ ký. Hãy kiểm tra header.alg có khớp với mong đợi của bạn không.
iKit hiện chỉ hỗ trợ xác minh HMAC (HS256/384/512). RS256 và ES256 dùng mã hóa khóa công khai — việc xác minh cần khóa công khai của bên phát hành ở dạng PEM, đòi hỏi giao diện phức tạp hơn. Hiện tại việc giải mã vẫn hoạt động (header/payload/signature hiển thị đúng), nhưng nút Xác minh sẽ báo không hỗ trợ. Tính năng xác minh RSA/ECDSA đã nằm trong kế hoạch.
Cùng ý tưởng, mặc định khác nhau. Bộ giải mã của iKit chạy hoàn toàn trong trình duyệt (jwt.io cũng vậy, nhưng mã của iKit có thể xem qua view-source và tên miền của chúng tôi không có theo dõi từ bên thứ ba). Chúng tôi thêm nhãn ĐÃ HẾT HẠN / hợp lệ rõ ràng cho claim exp, ghi chú claim có cấu trúc (iat / nbf / iss / sub / aud / jti hiển thị thành các hàng dễ đọc), và nút sao chép toàn bộ kết quả giải mã để bạn dán vào báo cáo lỗi.