Bỏ qua menu, vào nội dung chính
Quay lại
Giải mã JWT

JWT decode: giải mã header, payload và hạn token

Giải mã JWT ngay trong trình duyệt: header, payload, thời hạn. Token không gửi đi đâu.

JWT token

HEADER.PAYLOAD.SIGNATURE
Hiệu lực
Còn ...
exp: 20:20:00 17/5/2025 (GMT+7)
Phát hành
...
iat: 20:20:00 17/5/2024 (GMT+7)
Algorithm
HS256
Type: JWT

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload (Claims)

{
  "sub": "12345",
  "name": "Trần Công Thắng",
  "iat": 1715952000,
  "exp": 1747488000,
  "role": "admin",
  "iss": "alodev.vn"
}

Signature

fakeSignatureForDemoOnly

Signature chỉ kiểm tra được nếu có secret/public key. Tool này decode (không verify) - không cần secret.

Giải mã token và ranh giới công cụ không vượt qua

Công cụ này bóc ra những gì

Token được tách theo hai dấu chấm, hai phần đầu được giải Base64 an toàn cho địa chỉ web rồi in ra thành JSON có định dạng: phần header cho biết thuật toán ký và loại token, phần payload chứa các khai báo. Các khai báo thời gian gồm thời điểm phát hành, thời điểm bắt đầu hiệu lực và thời điểm hết hạn được đổi sang giờ Việt Nam kèm khoảng cách so với hiện tại, và token quá hạn được đánh dấu rõ.

Lúc gỡ lỗi phiên đăng nhập

Khi một lệnh gọi trả về mã 401 và bạn cần biết token đã hết hạn hay chỉ thiếu quyền. Khi phân quyền chạy không như mong đợi và cần xem khai báo vai trò, phạm vi hay mã tổ chức thực tế nằm trong token. Khi muốn biết nhà cung cấp đăng nhập đang phát token sống bao lâu để cấu hình vòng làm mới cho đúng.

Đọc các mốc thời gian

Các khai báo thời gian tính bằng giây kể từ mốc năm 1970, không phải mili giây; nhân nhầm nghìn lần là lỗi kinh điển khi tự sinh token. Khai báo thời điểm bắt đầu hiệu lực nghĩa là token bị từ chối trước mốc đó, và đồng hồ máy chủ lệch vài phút đủ để gây lỗi khó hiểu ở chỗ này.

Ranh giới không nên vượt

Công cụ chỉ giải mã, tuyệt đối không xác minh chữ ký, vì việc đó cần khoá bí mật và phải làm ở phía máy chủ. Một payload trông hợp lệ hoàn toàn có thể thuộc về token giả. Phần payload không hề được mã hoá, chỉ là mã hoá dạng biểu diễn, nên bất kỳ ai cầm token đều đọc được; đừng nhét số căn cước, số tài khoản hay bất cứ dữ liệu nhạy cảm nào vào đó. Nếu thấy thuật toán khai là none thì đó là dấu hiệu của một kiểu tấn công cũ, hệ thống bắt buộc phải từ chối chứ không được tin.

Token không rời trình duyệt. Việc tách và giải mã chạy trong trình duyệt, token không được gửi đi đâu. Dù vậy một token còn hạn vẫn là chìa khoá mở phiên đăng nhập, nên đừng dán nó lên màn hình đang chia sẻ hoặc đang quay lại.

JWT decode: cấu trúc token, claim và chữ ký

JWT decode là gì

JWT (JSON Web Token, RFC 7519) là chuỗi gồm ba phần ngăn bởi dấu chấm: header.payload.signature. Header và payload là hai JSON object được mã hoá base64url; signature là chữ ký tính trên hai phần đầu.

JWT decode nghĩa là tách chuỗi theo dấu chấm và giải base64url hai phần đầu để đọc lại JSON. Việc này không cần khoá, ai cầm token cũng làm được, nên decode khác hoàn toàn với verify (xác minh chữ ký).

Cách dùng công cụ JWT decode

  1. Dán token vào ô nhập, chỉ phần chuỗi bắt đầu bằng eyJ (nếu chép từ header Authorization thì bỏ chữ Bearer phía trước).
  2. Đọc header: alg là thuật toán ký (HS256, RS256, ES256...), typ thường là JWT, kid là mã khoá dùng để ký nếu hệ thống có nhiều khoá.
  3. Đọc payload (token claims): các khai báo về người dùng và phiên, ví dụ sub là user id.
  4. Xem các mốc thời gian đã đổi sang ngày giờ theo đồng hồ máy bạn: token còn hạn hay đã hết hạn.

Các claim chuẩn trong payload

ClaimTên đầy đủÝ nghĩa
ississuerBên phát hành token, ví dụ địa chỉ máy chủ đăng nhập
subsubjectChủ thể của token, thường là user id
audaudienceBên được phép nhận token; API phải từ chối token không dành cho mình
expexpiration timeThời điểm hết hạn, tính bằng giây kể từ 01/01/1970 (UTC)
nbfnot beforeToken chưa được chấp nhận trước thời điểm này
iatissued atThời điểm phát hành
jtiJWT IDMã duy nhất của token, dùng để chống dùng lại hoặc thu hồi

Ngoài các claim chuẩn, hệ thống thường thêm claim riêng như role, scope, tenant, email. Công cụ hiện đủ mọi claim có trong payload.

Thuật toán ký và cách verify the signature

  • HS256 (HMAC SHA-256): ký và kiểm bằng cùng một secret key. Chỉ máy chủ giữ secret mới verify được; lộ secret là ai cũng tạo được token hợp lệ.
  • RS256 (RSA) và ES256 (ECDSA): ký bằng khoá riêng, kiểm bằng khoá công khai. Dịch vụ nhận token chỉ cần khoá công khai, thường lấy từ địa chỉ JWKS của bên phát hành.
  • Khi verify, máy chủ phải cố định thuật toán mong đợi thay vì tin alg trong header, kiểm exp, nbf, iss, aud, rồi mới dùng các claim. Token khai alg là none phải bị từ chối.

Công cụ này chỉ decode, không verify the signature, vì verify cần secret key hoặc khoá công khai của hệ thống và phải làm ở phía máy chủ. Payload đọc được không có nghĩa token là thật.

Lỗi thường gặp khi làm việc với JWT

  • Đặt exp bằng mili giây (Date.now()) thay vì giây: token có hạn tới vài chục nghìn năm sau.
  • Đồng hồ máy chủ lệch vài phút làm token vừa phát hành đã bị từ chối vì nbf hoặc iat; nên cho phép sai lệch nhỏ khi kiểm thời gian.
  • Đưa dữ liệu nhạy cảm (số căn cước, số tài khoản, mật khẩu) vào payload: payload chỉ mã hoá dạng biểu diễn, không phải mã hoá bảo mật.
  • Token sống quá lâu mà không có cơ chế thu hồi: nên dùng access token ngắn hạn kèm refresh token.

Tên claim theo RFC 7519 (JSON Web Token); thuật toán ký theo RFC 7518 (JSON Web Algorithms).

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

JWT Decoder có xác minh chữ ký không?

Không. Công cụ chỉ giải mã header và payload để đọc nội dung, việc xác minh chữ ký cần khoá bí mật và phải làm ở phía máy chủ.

Vì sao payload trong JWT không được coi là bí mật?

Payload chỉ được mã hoá base64url chứ không mã hoá thật, bất kỳ ai cầm token đều đọc được nội dung bên trong.

Các mốc thời gian exp, iat, nbf tính theo đơn vị gì?

Tính bằng giây kể từ năm 1970, không phải mili giây - nhân nhầm nghìn lần là lỗi kinh điển khi tự sinh token.

JWT decode và JWT verify khác nhau thế nào?

Decode chỉ giải base64url phần header và payload để đọc, không cần khoá. Verify kiểm chữ ký bằng secret key (HS256) hoặc khoá công khai (RS256, ES256) và kiểm các claim exp, nbf, iss, aud; chỉ token verify thành công mới được tin.

Token dán vào công cụ này có an toàn không?

Việc giải mã chạy trong trình duyệt và token không được gửi đi đâu, nhưng một token còn hiệu lực vẫn là chìa khoá đăng nhập nên tránh dán lên màn hình đang chia sẻ.

Công cụ liên quan

Xem tất cả công cụ →

Công cụ riêng cho doanh nghiệp