tools / jwt
jwt/
Giải mã Header và Payload của JWT, hiển thị exp / iat / nbf theo giờ địa phương. Chỉ giải mã, không xác minh chữ ký.
Token
Thời gian
Header
Payload
Signature
Câu hỏi thường gặp
Nội dung giải mã ra có đáng tin không, công cụ này có xác minh chữ ký không
Không xác minh. Công cụ này chỉ giải mã Header và Payload, không kiểm tra chữ ký, nên giải mã thành công không có nghĩa là token là thật hay chưa bị sửa. Xác minh chữ ký cần khóa bí mật hoặc khóa công khai, và nên thực hiện ở backend bằng thư viện JWT. Ngoài ra, Payload chỉ được mã hóa dạng base64url (encode) chứ không phải mã hóa bảo mật (encrypt), ai có token cũng đọc được, đừng đặt mật khẩu hay thông tin nhạy cảm vào đó.
Báo "Số phần không đúng" hoặc "Đây là JWE" nghĩa là gì
JWT gồm ba phần header.payload.signature nối với nhau bằng dấu chấm; không phải 3 phần thì sẽ báo số phần không đúng. Nguyên nhân thường gặp là sao chép thiếu, sao chép thừa nội dung khác, hoặc thứ bạn dán vốn không phải JWT, ví dụ session ID hay token ngẫu nhiên không có cấu trúc. Token có đúng 5 phần là JWE, nội dung đã được mã hóa nên không giải mã được ở đây.
Làm gì khi báo "không phải base64url hợp lệ" hoặc "độ dài không hợp lệ"
Nghĩa là một phần nào đó chứa ký tự không thuộc về JWT, hoặc bị cắt cụt. Thông báo sẽ nêu rõ là phần nào, nếu có ký tự không hợp lệ thì còn chỉ ra đó là ký tự nào. JWT dùng base64url, chỉ gồm chữ cái, chữ số, - và _, dấu = ở cuối có hay không đều được. Thường gặp nhất là token bị dính dấu ngoặc kép ở đầu; có + hoặc / nghĩa là đã dùng Base64 thông thường, cần đổi thành - và _. Khi sao chép bị cắt cụt, thường sẽ báo "độ dài không hợp lệ" hoặc "không phải JSON hợp lệ".
Token có tiền tố Bearer hoặc có xuống dòng thì dán thẳng được không
Được. Bearer ở đầu sẽ được tự động bỏ đi (không phân biệt chữ hoa thường), khoảng trắng, dấu xuống dòng và tab trong token cũng bị bỏ qua, nên token sao chép từ header của request hoặc từ log có thể dán thẳng. Đầu vào vượt quá 1 MB sẽ bị từ chối ngay; JWT thật thường chỉ từ vài trăm byte đến vài KB.
Trạng thái hiển thị "Đã hết hạn", "Chưa có hiệu lực", "Ở tương lai" nghĩa là gì
Chúng ứng với ba trường thời gian trong Payload. exp là thời điểm hết hạn, đến lúc đó sẽ hiện "Đã hết hạn"; nbf là thời điểm bắt đầu có hiệu lực, chưa đến thì hiện "Chưa có hiệu lực"; iat là thời điểm phát hành, nếu muộn hơn hiện tại sẽ ghi "Ở tương lai", có thể do đồng hồ của bên phát hành và máy tính của bạn không khớp nhau. Dòng "Trạng thái" ở trên cùng xem nbf trước rồi mới đến exp, cả hai đều ổn mới hiện "Hợp lệ", điều này chỉ có nghĩa là hợp lệ về mặt thời gian, không liên quan đến chữ ký.
Thời gian hiển thị lệch vài giờ so với dự kiến, thời gian còn lại cũng không đúng
Trang hiển thị theo múi giờ và đồng hồ của máy tính bạn, múi giờ được ghi sau ngày, ví dụ UTC+08:00. exp, iat, nbf bản thân là Unix timestamp (tính bằng giây), không phụ thuộc múi giờ, đổi múi giờ chỉ làm cách hiển thị khác đi. Thời gian còn lại làm mới mỗi giây, tính theo thời gian hiện tại của máy tính bạn, nên đồng hồ sai thì kết quả sai. Giá trị quá lớn (ví dụ timestamp mili giây 13 chữ số) sẽ có ghi chú JWT quy định đơn vị là giây; các trường thời gian khác như auth_time không được tự động quy đổi.
Token ký bằng HS256, RS256, ES256 và các thuật toán khác đều giải mã được không
Đều được. Giải mã chỉ là khôi phục hai phần đầu thành JSON, không liên quan đến thuật toán ký. alg trong Header được hiển thị cạnh tiêu đề, khi alg là none sẽ ghi "không có chữ ký". Phần Signature chỉ hiển thị nguyên văn (base64url), không được giải mã.
Token tôi dán vào có bị tải lên không
Không. Việc giải mã diễn ra trong trình duyệt, trang không gửi token đi đâu cả. Tuy vậy, token thường tương đương với thông tin đăng nhập, nên đừng tùy tiện gửi token còn hạn đang dùng thật cho người khác, cũng đừng dán vào những trang web bạn không biết.