API trả về lỗi 401 Unauthorized nhưng bạn chắc chắn mình đã gắn đúng token vào header. Token lấy từ đâu? Từ response đăng nhập 15 phút trước. Vấn đề có thể ở đó — token đã hết hạn, hoặc claim aud (audience) không khớp với service đang gọi, hoặc role thiếu quyền cần thiết. Không cần viết thêm code hay gọi thêm API để kiểm tra — bạn chỉ cần giải mã JWT ra và đọc bên trong.
JWT (JSON Web Token) trông như một chuỗi mã hóa khó đọc, nhưng thực ra header và payload chỉ là base64url — giải mã ra là JSON thuần, ai cũng đọc được. Bài này hướng dẫn cách đọc một JWT, hiểu các claim quan trọng, và một số điều cần cẩn thận khi dùng công cụ online.
Giải mã nhanh: dán chuỗi JWT vào công cụ giải mã jwt để xem header, payload và thời điểm hết hạn ngay lập tức. Không cần đăng nhập.
Bên trong một JWT có gì?
Mỗi JWT gồm ba phần ngăn cách bởi dấu chấm: header.payload.signature. Chỉ signature là dùng thuật toán ký số — header và payload chỉ là base64url, mở ra đọc được mà không cần secret key.
PhầnNội dungCần key để đọc?HeaderThuật toán ký (alg), loại token (typ)KhôngPayloadClaims: sub, exp, iat, role, email…KhôngSignatureChữ ký số để xác minh tính toàn vẹnCần secret key
Các claim thường gặp trong payload:
ClaimÝ nghĩaĐịnh dạngsubSubject — thường là user IDstringexpExpiration — thời điểm hết hạnUnix timestamp (giây)iatIssued At — thời điểm cấp tokenUnix timestamp (giây)nbfNot Before — chưa được dùng trước mốc nàyUnix timestamp (giây)issIssuer — ai cấp tokenstringaudAudience — token dành cho service nàostring hoặc array
Điểm quan trọng cần nhớ: giải mã không phải xác minh. Đọc được payload không có nghĩa là token đó hợp lệ — server vẫn phải kiểm tra signature bằng secret key. Công cụ giải mã chỉ giúp bạn "nhìn thấy" nội dung bên trong để debug, không thể làm giả token hay bỏ qua bước xác minh phía server.
3 bước debug token với JWT decoder
Bước 1 — Giải mã và đọc payload
Dán chuỗi JWT (phần sau Bearer trong Authorization header) vào công cụ, nó sẽ hiển thị ngay header và payload dưới dạng JSON có format đẹp, kèm thời gian hết hạn đã chuyển sang dạng đọc được.
👉 Giải mã: công cụ giải mã jwt (dán token, đọc header + payload tức thì).
Ví dụ payload sau khi decode:
{
"sub": "user_123",
"email": "minh@example.vn",
"role": "editor",
"iat": 1751000000,
"exp": 1751003600
}Nhìn vào exp và iat: token được cấp lúc iat và hết hạn sau 1 giờ (exp - iat = 3600 giây). Nếu giờ hiện tại đã vượt qua exp, đây là nguyên nhân lỗi 401.
Lỗi hay gặp:
Dán cả chuỗi
Bearer eyJ...thay vì chỉ phần token — bỏ chữBearerở đầu trước khi dán.Token bị cắt cụt khi copy từ log: JWT có đúng 2 dấu chấm phân cách 3 phần — nếu thiếu là token chưa đầy đủ, giải mã sẽ thất bại.
Lưu ý quan trọng: chỉ dán token test / token dev vào công cụ online. Token production chứa thông tin nhạy cảm (user ID, email, role) — dù giải mã client-side và không gửi lên server, bạn vẫn nên tránh dán token thật của người dùng vào bất kỳ công cụ bên thứ ba nào để đảm bảo an toàn dữ liệu.
Bước 2 — Decode từng phần bằng base64 (hiểu cơ chế)
Muốn hiểu rõ hơn cơ chế JWT hoặc cần decode thủ công khi gỡ lỗi sâu hơn, bạn có thể lấy phần thứ hai (payload, giữa hai dấu chấm) và decode base64url trực tiếp.
👉 Decode thủ công: công cụ base64 (chọn "Decode", dán phần payload của JWT).
JWT dùng base64url — khác base64 thông thường ở chỗ thay + bằng - và / bằng _, không có ký tự = padding. Nếu công cụ base64 thông thường báo lỗi, thêm ký tự = vào cuối cho đủ bội số 4 ký tự trước khi decode.
Ví dụ: lấy phần giữa hai dấu chấm của JWT, decode ra sẽ thấy chính xác chuỗi JSON như ở Bước 1 — điều này chứng minh payload không hề được mã hóa, chỉ được encode.
Lỗi hay gặp:
Decode nhầm phần header thành payload: phần đầu tiên (trước dấu chấm đầu tiên) là header, phần thứ hai mới là payload chứa claim người dùng.
Bước 3 — Kiểm tra signature bằng HMAC (nâng cao)
Nếu bạn đang dùng thuật toán HS256 và muốn tự xác minh signature của token — ví dụ để debug tại sao server từ chối token mà bạn tự tạo trong test — có thể tính lại signature thủ công.
👉 Tạo và kiểm tra HMAC: công cụ tạo hmac (chọn SHA-256, nhập header.payload làm message, nhập secret key).
Cách kiểm tra: tính HMAC-SHA256(header_base64url + "." + payload_base64url, secret_key) rồi so sánh với phần signature trong token (sau khi decode base64url). Nếu khớp, token nguyên vẹn; nếu không khớp, hoặc secret sai hoặc token đã bị chỉnh sửa.
Lỗi hay gặp:
Nhầm lẫn giữa HS256 và RS256: HS256 dùng shared secret (có thể kiểm tra thủ công), còn RS256 dùng cặp public/private key — để xác minh RS256 cần public key của nhà phát hành, không phải shared secret.
Debug xong hiểu được gì?
Thời gian: giải mã tức thì, không cần kết nối mạng vì toàn bộ xử lý trên trình duyệt.
Sau khi đọc claims: bạn biết ngay token còn hạn hay không, user đang có role gì, token được cấp bởi service nào — đủ để khoanh vùng lỗi 401 mà không cần nhờ team backend tra log.
Giải mã không thay thế xác minh: đây là tool debug, không phải công cụ bảo mật. Việc xác minh token (kiểm tra signature và exp) phải do server thực hiện với secret key trong mỗi request, không thể làm client-side.
Câu hỏi thường gặp (FAQ)
Giải mã JWT online có an toàn không? Công cụ decode chạy hoàn toàn client-side (JavaScript trong trình duyệt) — không gửi token lên bất kỳ server nào. Tuy nhiên, tốt nhất chỉ dán token test/dev; không nên dán token production chứa dữ liệu người dùng thật vào công cụ bên thứ ba.
Tại sao đọc được payload mà không cần secret key? Vì payload chỉ là base64url, không phải mã hóa. JWT không che giấu nội dung — nó chỉ đảm bảo tính toàn vẹn qua signature. Bài học quan trọng: đừng để thông tin thật sự nhạy cảm như mật khẩu hay số thẻ vào JWT payload.
Refresh token khác access token như thế nào? Access token thường ngắn hạn (vài phút đến vài giờ), dùng để gọi API mỗi request. Refresh token dài hạn hơn (vài ngày đến vài tuần), chỉ dùng để lấy access token mới khi hết hạn. Refresh token thường không phải JWT — nó là một chuỗi ngẫu nhiên lưu phía server.
Tôi muốn sinh hash an toàn cho quá trình xác thực thì dùng gì? Nếu cần sinh hash cho mật khẩu hoặc token xác thực trong quá trình test, hãy dùng công cụ tạo hash xác thực — hỗ trợ các thuật toán phổ biến như bcrypt, SHA-256 dành riêng cho mục đích xác thực.
BKNS Tools — bộ công cụ lập trình miễn phí cho developer Việt. Giải mã JWT · Base64 · HMAC · Hash xác thực — không cần đăng nhập.




