header.payload.signature
Trình giải mã JWT
JSON Web Token (JWT) gồm 3 phần Base64url ngăn cách bằng dấu chấm: header, payload và chữ ký. Dán một token để đọc các claim và thời gian của nó; token chỉ được giải mã ở đây, không được xác minh.
- iat 1700000000 = 2023-11-14 22:13:20 UTC
- exp 1700003600 = 2023-11-14 23:13:20 UTC
- HS256 = 32 B
Token ở lại trong thẻ này và không được gửi đi đâu. Một token đã giải mã không phải là một token đáng tin: chữ ký không bao giờ được kiểm tra ở đây.
Scanned by NortonTM Safe Web
Tóm tắt nhanh
- Giá
- Không mất phí
- Tài khoản
- Không cần
- Chuẩn
- RFC 7519 (JWT), RFC 7515 (JWS), RFC 7516 (JWE)
- Chữ ký
- Không được xác minh — token chỉ được giải mã
- Thời gian
- exp, nbf và iat hiển thị theo UTC và so sánh với đồng hồ của bạn
- Tải lên
- Không — token ở lại trong thẻ trình duyệt của bạn
Một token mẫu và các thuật toán thường gặp
Token mẫu trên trang này được ký bằng HMAC-SHA-256 với một khóa dùng tạm. Trang đã giải mã nó để tạo ra bảng đầu tiên.
| Claim | Giá trị | Thời gian (UTC) |
|---|---|---|
| iss | auth.example.com | — |
| sub | user-42 | — |
| aud | api | — |
| iat | 1700000000 | 2023-11-14 22:13:20 UTC |
| exp | 1700003600 | 2023-11-14 23:13:20 UTC |
| alg | Họ | Hàm băm | Kích thước chữ ký |
|---|---|---|---|
| HS256 | HMAC | SHA-256 | 32 B |
| HS512 | HMAC | SHA-512 | 64 B |
| RS256 | RSASSA-PKCS1-v1_5 | SHA-256 | 256 B (2048-bit key) |
| ES256 | ECDSA P-256 | SHA-256 | 64 B |
| ES512 | ECDSA P-521 | SHA-512 | 132 B |
| EdDSA | EdDSA | — | 64 B (Ed25519) |
Cách giải mã JWT
Dán token
Dán cả token, có hoặc không có Bearer ở đầu. Token có 3 phần ngăn cách bằng dấu chấm, hoặc 5 phần nếu là JWE đã mã hóa.
Đọc các phần
Header và payload hiện dưới dạng JSON đã định dạng, và mỗi claim được liệt kê trong một bảng. Các thời gian exp, nbf và iat được hiển thị theo UTC.
Kiểm tra thời gian
Trang so sánh exp và nbf với đồng hồ của thiết bị bạn và cho biết token đã hết hạn chưa. Nó không cho biết token có phải là thật hay không.
JWT được cấu tạo thế nào
JWT (RFC 7519) được viết dưới dạng header.payload.signature. Header và payload là các đối tượng JSON, mỗi cái được mã hóa Base64url không đệm (RFC 4648, mục 5), còn chữ ký là các byte thô trong cùng cách mã hóa đó. Giải mã chỉ đổi cách mã hóa, nên bất kỳ ai có token đều đọc được payload của nó: đừng đưa bí mật vào đó. Header nêu thuật toán ký trong alg, chẳng hạn HS256 (HMAC với SHA-256, chữ ký 32 byte) hoặc RS256 (RSA với SHA-256, 256 byte cho khóa 2048 bit).
Trang này giải mã một token và không làm gì thêm. Nó không kiểm tra chữ ký, vì việc đó cần khóa, và nó không thể cho bạn biết token là thật, đã bị thu hồi hay được máy chủ chấp nhận. Nó so sánh các claim exp, nbf và iat, tính bằng giây kể từ 1970-01-01 UTC, với đồng hồ của thiết bị bạn và in chúng thành ngày giờ UTC. Token có 5 phần là JWE: nội dung của nó được mã hóa, nên chỉ có thể hiển thị header.
Câu hỏi về JWT
Làm sao để giải mã JWT?
Dán token vào ô. Trang tách nó tại các dấu chấm, chuyển hai phần đầu từ Base64url và hiện chúng dưới dạng JSON. Bearer ở đầu được bỏ qua. Với token mẫu, header là {"alg":"HS256","typ":"JWT"}.
Trang này có xác minh chữ ký không?
Không. Việc xác minh cần khóa bí mật hoặc khóa công khai, và trang này không bao giờ yêu cầu khóa nào. Một token giải mã được ở đây vẫn có thể bị giả mạo, bị sửa hoặc bị thu hồi. Hãy xác minh chữ ký trong mã máy chủ của bạn bằng một thư viện JWT còn được bảo trì.
exp, iat và nbf nghĩa là gì?
Chúng là thời gian tính bằng giây kể từ 1970-01-01 UTC (RFC 7519). exp là lúc token hết hạn, nbf là thời điểm trước đó token không được chấp nhận, và iat là lúc token được phát hành. Trong token mẫu, iat 1700000000 là 2023-11-14 22:13:20 UTC và exp 1700003600 là một giờ sau đó.
Dán token thật vào đây có an toàn không?
Token ở lại trong thẻ trình duyệt của bạn và không được gửi đi đâu. Tuy vậy, một token còn hiệu lực là một thông tin xác thực: ai có nó đều dùng được cho đến khi nó hết hạn. Hãy dán token do bạn sở hữu, và nên dùng token đã hết hạn hoặc token thử khi có thể.
Vì sao token của tôi có 5 phần?
Token có 5 phần là JWE, một JSON Web Token đã mã hóa (RFC 7516). Payload của nó được mã hóa cho người nhận, nên trang này chỉ hiện header và kích thước các phần. Nội dung không đọc được ở đây.
"not Base64url" hoặc "not JSON" nghĩa là gì?
Mỗi phần trong hai phần đầu phải là văn bản Base64url giải mã ra một đối tượng JSON. Trang nêu phần bị lỗi và lý do: một ký tự ngoài bảng chữ cái, các byte không phải UTF-8, hoặc JSON có lỗi ở một dòng và cột nhất định. Nguyên nhân thường gặp là token bị cắt ngắn hoặc có thêm ký tự.