Giải mã JWT (JWT Decoder)

Dán JSON Web Token để đọc header và payload, biết khi nào token hết hạn và hiểu từng claim. Token của bạn không bao giờ rời khỏi trình duyệt.

Chạy trên trình duyệtKhông cần đăng kýKhông tải lên gì

Giải mã không phải là xác minh. Bất kỳ ai cũng đọc được header và payload của JWT, vì chúng chỉ được mã hóa base64url. Công cụ này cho thấy token tuyên bố điều gì; nó không chứng minh token là thật. Hãy luôn xác minh chữ ký trên máy chủ của bạn.

Header

Payload


      

Xác minh chữ ký (tùy chọn, HS256/HS384/HS512)

Kiểm tra chữ ký HMAC bằng secret bạn nhập, dùng Web Crypto API của trình duyệt. Secret không bao giờ rời khỏi trang này. Token RSA/ECDSA cần khóa công khai của bên phát hành nên không được xác minh ở đây.

Cách dùng JWT Decoder

  1. Dán token vào ô Token đã mã hóa. Tiền tố Bearer từ header Authorization sẽ được bỏ qua.
  2. Header và payload được giải mã ngay lập tức và hiển thị dưới dạng JSON đã định dạng.
  3. Đọc bảng Giải thích các claim: exp, iat và nbf được chuyển thành ngày giờ kèm thời gian “hết hạn sau” / “đã hết hạn cách đây”.
  4. Xem thanh trạng thái để biết vấn đề hết hạn và các cảnh báo về thiết lập rủi ro như alg: none.
  5. Tùy chọn nhập secret dùng chung để xác minh chữ ký HS256, HS384 hoặc HS512 ngay trên máy.

Bên trong JWT có gì?

JSON Web Token (RFC 7519) là ba chuỗi base64url nối với nhau bằng dấu chấm: header.payload.signature. Header nêu thuật toán ký (alg) và loại token. Payload chứa các claim, như người dùng là ai và khi nào token hết hạn. Chữ ký được tính trên hai phần đầu bằng secret hoặc khóa bí mật.

Giải mã không phải là xác minh

Header và payload chỉ được mã hóa (encode), không được mã hóa bảo mật (encrypt), nên ai giữ token cũng đọc được. Vì vậy đừng bao giờ đặt mật khẩu hay secret vào payload JWT. Giải mã cho bạn biết token nói gì. Xác minh chữ ký, thường trên máy chủ API bằng thư viện như jose hoặc PyJWT, chứng minh ai đã phát hành nó và nó chưa bị sửa đổi. Máy chủ cũng phải kiểm tra exp, nbf, iss và aud, và từ chối các thuật toán không mong đợi.

Bảng tra các claim đăng ký

ClaimÝ nghĩa
issIssuer: ai đã tạo và ký token
subSubject: thường là ID người dùng
audAudience: token dành cho API nào
expThời điểm hết hạn, tính bằng giây kể từ Unix epoch
nbfKhông hợp lệ trước thời điểm này
iatThời điểm phát hành
jtiID duy nhất của token, hữu ích cho danh sách thu hồi

Debug lỗi “token expired”

Nếu API từ chối một token trông vẫn còn mới, hãy so sánh exp và nbf với đồng hồ máy chủ. Lệch giờ nhỏ giữa các máy là chuyện thường gặp, nên hầu hết thư viện cho phép sai số 30-60 giây. Cũng hãy kiểm tra exp có tính bằng giây không: giá trị mili giây là lỗi phổ biến và đẩy thời điểm hết hạn tới hàng nghìn năm sau.

Câu hỏi thường gặp

Dán JWT production vào đây có an toàn không?
Việc giải mã diễn ra hoàn toàn trong trình duyệt bằng JavaScript. Token không bị tải lên, ghi log hay lưu lại. Dù vậy, như với mọi thông tin đăng nhập, hãy cẩn thận với token đang dùng và ưu tiên token đã hết hạn hoặc token test khi chia sẻ ảnh chụp màn hình.
Công cụ này có xác minh chữ ký JWT không?
Chỉ giải mã thì không. Bạn có thể tùy chọn xác minh token HS256, HS384 và HS512 bằng cách nhập secret dùng chung; HMAC được tính cục bộ bằng Web Crypto API. Token RS256 và ES256 phải được xác minh bằng khóa công khai của bên phát hành trên máy chủ của bạn.
Vì sao token của tôi hiển thị là đã hết hạn?
Claim exp nằm trong quá khứ so với đồng hồ máy tính của bạn. Hãy yêu cầu token mới, hoặc làm mới bằng refresh token. Nếu thời gian trông sai, hãy kiểm tra lệch giờ hoặc giá trị exp bị ghi bằng mili giây.
JWT, JWS và JWE khác nhau thế nào?
JWT là định dạng claim. JWS là JWT có chữ ký gồm ba phần, chính là thứ công cụ này giải mã. JWE là JWT đã mã hóa gồm năm phần; không thể đọc payload của nó nếu không có khóa giải mã.
Vì sao alg “none” nguy hiểm?
Token không có chữ ký có thể bị bất kỳ ai giả mạo. Máy chủ phải từ chối alg: none và chỉ nên chấp nhận đúng thuật toán mà nó mong đợi.

Công cụ liên quan