Giải mã JWT: đọc header, payload và hạn dùng của token
Công cụ giải mã JWT (JWT decoder) này tách JSON Web Token thành header và payload, rồi hiển thị cả hai dưới dạng JSON thụt dòng ngay khi bạn dán token. Các claim thời gian như exp được kèm ngày giờ địa phương dễ đọc, và một huy hiệu cho bạn biết token đã hết hạn chưa. Việc xác minh chữ ký là tùy chọn. Token được đọc ngay trong trình duyệt của bạn và không bao giờ được tải lên. Bạn có thể decode JWT token hay làm jwt parser online ngay tại đây.
Giải mã JWT online từng bước
- Dán token vào ô JSON Web Token. Khối header và payload hiện ra ngay, không có nút giải mã nào cần bấm.
- Xem các huy hiệu trạng thái phía trên kết quả: token đã hết hạn, chưa có hiệu lực hay không có hạn dùng, và tình trạng chữ ký.
- Chọn Sao chép header hoặc Sao chép payload để sao chép khối đó dưới dạng JSON thuần. Các ghi chú ngày giờ không nằm trong bản sao.
- Chọn Xóa để làm trống ô và bắt đầu với token khác.
Bạn có thể dán token nguyên dạng như nhận được: phần "Authorization: Bearer" ở đầu, dấu ngoặc kép bao quanh và ngắt dòng đều được tự động bỏ, nên sao chép từ header của request, một dòng log hay phản hồi JSON đều dùng được. Ô nhập nhận tối đa 100.000 ký tự. Số lớn và văn bản tiếng nước ngoài trong các claim được hiển thị chính xác, và giá trị dài tự xuống dòng thay vì tràn khỏi màn hình.
Header và payload của JWT chứa gì
JWT gồm ba phần base64url nối với nhau bằng dấu chấm: header.payload.signature. Hai phần đầu chỉ là JSON được mã hóa, vì vậy bạn có thể đọc JWT mà không cần secret. Các claim thường gặp nhất:
iss: issuer, bên đã tạo tokensub: subject, token nói về aiaud: audience, token dành cho aiexp: thời điểm hết hạnnbf: không có hiệu lực trước thời điểm nàyiat: thời điểm phát hànhjti: ID duy nhất của token
Header thường chứa alg (thuật toán ký), typ và đôi khi kid, ID của khóa đã dùng để ký.
JWT hết hạn khi nào? Đọc claim exp
exp, iat, nbf và auth_time là timestamp Unix tính bằng giây. Công cụ viết mỗi giá trị thành ngày giờ địa phương ngay cạnh con số, nên bạn đọc được mà không phải quy đổi. Các huy hiệu phía trên kết quả dùng đồng hồ của thiết bị bạn:
- Từ claim
exp, huy hiệu cho biết token đã hết hạn cách đây bao lâu hoặc còn dùng được bao lâu. - Nếu không có
exp, bạn thấy Không có hạn dùng: token không có claim exp. - Nếu
nbfvẫn ở tương lai, token được đánh dấu là chưa có hiệu lực.
Xác minh chữ ký bằng secret hoặc khóa công khai
Giải mã chỉ cho thấy token nói gì; chỉ chữ ký mới chứng minh token chưa bị sửa. Bên dưới kết quả có Xác minh chữ ký (tùy chọn). Để Thuật toán ở chế độ tự nhận diện, vốn đọc alg từ token, hoặc tự chọn: HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 hoặc EdDSA. Sau đó dán khóa vào Secret hoặc khóa công khai:
- một secret thông thường cho các thuật toán HS, dùng đúng như bạn gõ, không giải mã base64 trước
- khóa công khai PEM (
-----BEGIN PUBLIC KEY-----) hoặc khóa công khai RSA dạng PKCS#1 - một chứng chỉ X.509
- một JWK, hoặc cả JWKS, khi đó khóa được chọn theo
kidcủa token
Huy hiệu đổi thành Chữ ký hợp lệ hoặc Chữ ký không hợp lệ. Không có khóa thì nó giữ nguyên Chưa xác minh chữ ký. Token ghi alg none sẽ hiện Không có chữ ký: token này không được ký. Nếu bạn dán khóa riêng, công cụ từ chối và yêu cầu khóa công khai, thứ duy nhất cần để xác minh. Việc kiểm tra dùng WebCrypto có sẵn của trình duyệt; EdDSA cần trình duyệt đủ mới.
Khi giải mã token JWT không thành công
Lỗi hiện bên dưới ô nhập và chỉ ra phần gây vấn đề:
- Văn bản không có ba phần ngăn bởi hai dấu chấm, và thông báo cho biết đã tìm thấy mấy phần.
- Header, payload hoặc chữ ký không phải base64url hợp lệ, thường do mất một ký tự khi sao chép.
- Header hoặc payload không phải văn bản UTF-8 hợp lệ, hoặc không phải JSON hợp lệ.
- Token có năm phần là JWE đã mã hóa. Công cụ nhận ra và giải thích, nhưng không thể đọc nếu không có khóa riêng.
Dán token vào đây có an toàn không?
Token và mọi khóa đều được giải mã và kiểm tra ngay trên thiết bị của bạn. Không có gì được tải lên hay lưu lại, và bạn không cần tài khoản. Dù vậy, access token đang dùng là một thông tin xác thực, nên hãy ưu tiên token đã hết hạn hoặc token thử nghiệm khi có thể.
Công cụ này chỉ đọc và kiểm tra token. Nó không tạo hay ký JWT và không giải mã JWE.
Câu hỏi thường gặp
Có thể giải mã JWT mà không cần secret không?
Có. Header và payload của JWT chỉ được mã hóa base64url, không bị mã hóa bảo mật, nên ai có token cũng đọc được. Dán vào ô “JSON Web Token” là cả hai hiện ra ngay. Secret hoặc khóa công khai chỉ cần để kiểm tra chữ ký, và ở đây việc đó là tùy chọn.
Làm sao biết JWT đã hết hạn chưa?
Dán token và đọc huy hiệu phía trên kết quả. Dựa vào claim exp, huy hiệu cho biết token đã hết hạn cách đây bao lâu hoặc còn bao nhiêu thời gian. Token không có claim exp hiện “Không có hạn dùng: token không có claim exp”, và nếu nbf vẫn ở tương lai thì huy hiệu báo token chưa có hiệu lực.
Làm sao đổi giá trị exp của JWT thành ngày giờ?
Bạn không cần đổi. exp là timestamp Unix tính bằng giây, và công cụ viết ngày giờ địa phương tương ứng ngay cạnh trong khối “Payload”. iat, nbf và auth_time cũng được xử lý như vậy.
Làm sao xác minh chữ ký của JWT bằng khóa công khai?
Trong “Xác minh chữ ký (tùy chọn)”, để “Thuật toán” ở chế độ tự nhận diện hoặc chọn thuật toán token dùng, rồi dán khóa công khai vào “Secret hoặc khóa công khai”. Khóa PEM (-----BEGIN PUBLIC KEY-----), RSA PUBLIC KEY, chứng chỉ X.509, JWK hoặc JWKS đều dùng được. Sau đó huy hiệu đổi thành “Chữ ký hợp lệ” hoặc “Chữ ký không hợp lệ”.
Có decode JWT token ngay trên máy mà không gửi lên máy chủ được không?
Được, công cụ này hoạt động đúng như vậy. Token được tách, giải mã và kiểm tra trong trình duyệt của bạn, không có gì được tải lên hay lưu lại. Việc kiểm tra chữ ký dùng WebCrypto của trình duyệt, nên cả token lẫn khóa đều không bị gửi đi đâu.
Header và payload của JWT chứa những gì?
Header mô tả token, thường là thuật toán ký (alg), loại (typ) và đôi khi là ID khóa (kid). Payload chứa các claim, như ai đã phát hành (iss), nói về ai (sub), dành cho ai (aud) và khi nào hết hạn (exp). Cả hai đều là JSON thuần, hiển thị trong khối “Header” và “Payload”.
alg none trong JWT nghĩa là gì?
Nghĩa là token tự khai báo là không được ký: phần chữ ký trống và không có gì để kiểm tra. Công cụ hiện “Không có chữ ký: token này không được ký”. Máy chủ không bao giờ nên chấp nhận token như vậy làm bằng chứng danh tính.
Làm sao để decode bearer token?
Nếu đó là JWT, hãy dán nguyên dạng. Phần “Authorization: Bearer” ở đầu, dấu ngoặc kép và ngắt dòng được tự động bỏ, nên bạn có thể sao chép thẳng từ header của request hoặc log. Bearer token dạng mờ không gồm ba phần ngăn bởi dấu chấm thì không giải mã được, và công cụ cho biết đã tìm thấy mấy phần.
Có thể giải mã JWE hoặc tạo và ký JWT ở đây không?
Không. Token có năm phần là JWE và nội dung đã được mã hóa, nên không đọc được nếu thiếu khóa riêng; công cụ nhận ra và báo như vậy thay vì hiện lỗi. Công cụ cũng không tạo, ký hay sửa token, chỉ đọc và kiểm tra chúng.