Giải mã JWT
Dán JWT token → Xem header, payload, signature → Kiểm tra hạn. Miễn phí, bảo mật trong trình duyệt.
Các registered claims theo RFC 7519
Cách giải mã JWT trong các ngôn ngữ phổ biến
Nhấp để tải token mẫu vào ô nhập
JWT (JSON Web Token) là gì?
JWT (JSON Web Token) là một chuẩn mở theo RFC 7519 để truyền thông tin an toàn giữa các bên dưới dạng đối tượng JSON nhỏ gọn. Token được ký số (digitally signed) bằng thuật toán HMAC hoặc RSA/ECDSA, đảm bảo tính toàn vẹn dữ liệu. JWT được sử dụng phổ biến trong xác thực (authentication) và phân quyền (authorization) cho API và ứng dụng web.
Không giống như session-based authentication, JWT là stateless — server không cần lưu session. Toàn bộ thông tin người dùng được mã hóa trong token, giúp hệ thống dễ dàng scale ngang (horizontal scaling) và hoạt động tốt với microservices.
Cấu trúc JWT: 3 phần
Mỗi JWT gồm 3 phần được phân cách bằng dấu chấm (.):
- Header (xanh dương): chứa thuật toán ký (
alg) và loại token (typ). - Payload (xanh lá): chứa các claims — dữ liệu thực tế như user ID, role, thời gian hết hạn.
- Signature (đỏ): chữ ký số được tạo từ header + payload + secret key. Chỉ server có secret key mới xác minh được.
Cả header và payload đều được mã hóa Base64url — không phải mã hóa bảo mật. Bất kỳ ai có token đều có thể đọc nội dung. Chỉ có signature mới đảm bảo token không bị giả mạo.
Registered Claims (Claims tiêu chuẩn)
RFC 7519 định nghĩa 7 registered claims, không bắt buộc nhưng rất được khuyến khích:
| Claim | Ý nghĩa | Ví dụ |
|---|---|---|
iss | Bên phát hành token | https://auth.example.com |
sub | Chủ thể của token | user-123 |
aud | Đối tượng nhận token | api.example.com |
exp | Thời gian hết hạn (Unix) | 1924985600 |
nbf | Không hợp lệ trước thời điểm này | 1711920000 |
iat | Thời điểm tạo token | 1711920000 |
jti | Mã định danh duy nhất | abc-123-def |
Thuật toán ký: HS256 vs RS256
HS256 (HMAC + SHA-256): Thuật toán đối xứng — cùng một secret key dùng để ký và xác minh. Đơn giản, nhanh, phù hợp cho ứng dụng đơn server hoặc khi cả bên ký và bên xác minh đều tin cậy lẫn nhau.
RS256 (RSA + SHA-256): Thuật toán bất đối xứng — private key ký, public key xác minh. An toàn hơn cho hệ thống phân tán vì chỉ auth server giữ private key, các service khác chỉ cần public key để xác minh. Phổ biến với OAuth 2.0 và OpenID Connect.
Lỗi thường gặp với JWT
- Lưu JWT trong localStorage: Dễ bị tấn công XSS. Nên dùng httpOnly cookie thay vì localStorage.
- Không kiểm tra exp: Luôn kiểm tra thời gian hết hạn trước khi tin tưởng token.
- Secret key yếu: Dùng ít nhất 256-bit random key cho HS256. Không dùng chuỗi dễ đoán như "secret" hay "password".
- Lưu dữ liệu nhạy cảm trong payload: Payload có thể đọc được bởi bất kỳ ai. Không lưu mật khẩu, số thẻ tín dụng trong JWT.
- Không thu hồi token: JWT stateless nên không thể "logout" bằng cách xóa session. Cần blacklist hoặc dùng refresh token pattern.
JWT trong xác thực API
Luồng xác thực JWT điển hình: (1) Client gửi username/password đến auth endpoint. (2) Server xác minh, tạo JWT chứa user ID và role, ký bằng secret key. (3) Client nhận token, đính kèm trong header Authorization: Bearer <token> cho mỗi request. (4) Server xác minh chữ ký + kiểm tra exp → cho phép hoặc từ chối request.
Pattern phổ biến: access token (thời hạn ngắn, 15 phút) + refresh token (thời hạn dài, 7 ngày). Khi access token hết hạn, client dùng refresh token để lấy access token mới mà không cần nhập lại mật khẩu.
Giới thiệu về Developer Tools
Công cụ developer tự động hóa các phần lặp đi lặp lại của công việc phần mềm: format JSON, encode/decode Base64, decode JWT để xác minh claim của token, tạo UUID, format XML, diff cấu hình. Đây không phải tác vụ hào nhoáng, nhưng là các điểm nghẽn ngốn 10-15 phút nhiều lần mỗi ngày — cộng lại hàng giờ mỗi tuần. Chạy chúng trên tab trình duyệt sạch sẽ hơn vật lộn với phụ thuộc CLI hay extension IDE có thể gửi dữ liệu riêng tư của bạn cho bên thứ ba.
Vì sao nó quan trọng
Công cụ developer client-side nhanh về cơ bản quan trọng vì chúng được dùng với dữ liệu nhạy cảm. JWT token chứa danh tính người dùng. Payload Base64 có thể encode API key. JSON dump bao gồm bản ghi khách hàng. Nếu một 'công cụ developer' gửi input của bạn lên server để xử lý, bạn vừa rò rỉ production secret. Công cụ dev của ZestLab chạy 100% client-side không có network call nào sau khi load page — những gì bạn paste vẫn ở trong trình duyệt.
Riêng tư và an toàn
Tất cả công cụ developer ở đây chạy trong trình duyệt bằng JavaScript thuần. Không có 'decode server' hay 'format API' — JWT, JSON, payload encode của bạn được parse bởi code chạy trên laptop của bạn. Tự xác minh bằng DevTools trình duyệt → Network tab: bạn sẽ thấy không có request nào khi dùng bất kỳ công cụ nào. Đó là tiêu chuẩn chúng tôi giữ vì công cụ dev xử lý secret.
Thực hành tốt
- Không bao giờ paste JWT hay API token production vào BẤT KỲ công cụ online nào mà không xác minh chạy client-side (check tab Network)
- Dùng chế độ ẩn danh trình duyệt để decode một lần các payload nhạy cảm
- Bookmark công cụ bạn dùng hàng ngày — URL công cụ ZestLab ổn định, không cần tài khoản
- Khi format JSON có secret để team review, redact credential trước khi share output