Công cụ giải mã JWT
Giải mã và xem chi tiết một JSON Web Token. Việc xác thực chữ ký cần khóa ký và phải làm phía máy chủ — công cụ này chỉ hiển thị nội dung.
Header
Payload
Chữ ký
- Sao chép JWT từ ứng dụng, phản hồi API, hoặc header Authorization của bạn.
- Dán vào ô. Việc giải mã chạy tự động khi bạn gõ.
- Đọc header và payload đã giải mã; chữ ký hiển thị nguyên trạng để tham khảo.
- Kiểm tra tóm tắt các claim thời gian (iat, exp, nbf) để phát hiện token hết hạn.
Công cụ này làm gì?
Một JSON Web Token là ba phân đoạn mã hóa base64url nối bằng dấu chấm: header.payload.signature. Header và payload là JSON; chữ ký là đầu ra HMAC hoặc RSA/ECDSA trên hai phân đoạn đầu. Công cụ này tách tại dấu chấm, giải mã base64url từng phần, phân tích JSON, và hiển thị các claim thời gian chuẩn như exp dưới dạng ngày dễ đọc. Nó không xác thực chữ ký — xem FAQ bên dưới để hiểu vì sao.
Ví dụ
Token mẫu trong đặc tả JWT (HS256, ký bằng khóa bí mật your-256-bit-secret):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c Header đã giải mã:
{
"alg": "HS256",
"typ": "JWT"
} Payload đã giải mã:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
} Vì sao chữ ký JWT của tôi bị đánh dấu không hợp lệ?
Công cụ giải mã này không kiểm tra chữ ký (xem FAQ), nhưng nếu trình xác thực phía máy chủ từ chối token của bạn, đây là những thủ phạm thường gặp.
- Sai bí mật hoặc khóa. Chỉ một ký tự khác biệt trong bí mật HMAC cũng tạo ra chữ ký hoàn toàn khác. Kiểm tra biến môi trường JWT_SECRET trên dịch vụ xác thực có khớp với bên phát hành.
- Sai lệch thuật toán. Một token ký bằng HS256 không thể xác thực bằng RS256. Kiểm tra claim alg trong header và đảm bảo trình xác thực được cấu hình cho cùng thuật toán.
- Token hết hạn. Ngay cả JWT ký đúng cũng thất bại khi xác thực nếu exp đã qua. Tóm tắt claim thời gian thể hiện rõ điều này sau khi giải mã.
- Sai lệch đồng hồ. nbf (not-before) ở tương lai gần cộng với đồng hồ máy chủ bị trôi tạo ra lỗi "token not yet valid". Cho phép một chút dung sai (ví dụ 60 giây) ở trình xác thực.
- Khoảng trắng trong token đã dán. Sao chép-dán đôi khi đi kèm khoảng trắng đầu hoặc dòng mới cuối. Một JWT phải đúng header.payload.signature, không có khoảng trắng bao quanh.
- alg: none. Nếu header nói "alg": "none", token không được ký. Từ chối loại này ở trình xác thực — đừng bao giờ coi chúng hợp lệ.
Câu hỏi thường gặp
Công cụ có thể xác thực chữ ký JWT không?
Không, và đó là có chủ ý. Xác thực chữ ký cần khóa ký — bí mật chia sẻ HMAC hoặc khóa công khai bất đối xứng. Khóa đó thuộc về máy chủ phát hành hoặc tiêu thụ token, chứ không phải dán vào một trang web. Công cụ này chỉ giải mã và hiển thị; xác thực xảy ra phía máy chủ trong backend của bạn.
Mỗi trong ba phân đoạn của JWT chứa gì?
Một JWT là header.payload.signature. Header là JSON mô tả thuật toán (alg) và loại token. Payload là JSON chứa các claim như sub, iat, exp. Chữ ký là đầu ra mã hóa base64url của việc ký hai phân đoạn đầu bằng bí mật hoặc khóa riêng. Hai phần đầu chỉ mã hóa chứ không mã hóa bảo mật.
JWT của tôi đã hết hạn — làm sao biết?
Xem claim exp trong payload. Đó là Unix timestamp tính bằng giây. Nếu Date.now() / 1000 lớn hơn exp, token đã hết hạn. Công cụ này hiển thị exp, iat và nbf dưới dạng ngày dễ đọc bên dưới payload để bạn nhận ra ngay mà không cần tự tính.
alg: none nghĩa là gì và vì sao nguy hiểm?
alg: none là tính năng JWT trong đó chữ ký rỗng và không được kiểm tra. Nhiều thư viện trước đây chấp nhận các token kiểu này, cho phép kẻ tấn công giả mạo JWT bằng cách dựng payload và đặt alg là none. Nếu bạn thấy giá trị header này, token không được ký — đừng tin bất kỳ máy chủ nào chấp nhận nó.
Các bạn có lưu JWT tôi dán ở đây không?
Không. Chúng tôi không lưu token nào bạn dán vào công cụ giải mã. Những gì bạn thả vào đều bị loại bỏ khi bạn đóng hoặc làm mới tab — không log, không có dấu vết nào ở phía chúng tôi về các token bạn đã xem. Dù vậy: một JWT cấp quyền truy cập đến exp của nó — hãy xem nó như mật khẩu và xoay vòng mọi token sản xuất bạn đã gỡ lỗi.
Phần chữ ký hiển thị một khối không thể đọc — có bình thường không?
Có. Chữ ký là đầu ra nhị phân từ HMAC hoặc RSA/ECDSA, mã hóa base64url. Nó không được tạo ra để con người đọc — chỉ phục vụ như một phép kiểm tra mật mã. Header và payload đã giải mã mới là các phần JSON bạn thao tác. Chữ ký rỗng nghĩa là token không được ký (alg: none).