Bộ giải mã JWT
Xem bên trong một JSON Web Token có gì.
Claims
| Claim | Giá trị | Ý nghĩa |
|---|
Công cụ này giải mã token nhưng không bao giờ xác thực chữ ký. Token của bạn ở lại trong tab trình duyệt này.
Chạy ngay trên trình duyệt. Không có gì bạn nhập vào bị gửi đi đâu cả.
- Ngày exp và iat dễ đọc
- Trạng thái hết hạn ngay lập tức
- Token ở lại trên thiết bị của bạn
Cách giải mã một JWT
- Dán token, có hoặc không có tiền tố Bearer.
- Đọc header và payload, hiển thị dưới dạng JSON đã định dạng.
- Xem bảng claim để biết issuer, audience và thời điểm hết hạn.
Ba phần của một JWT
| Phần | Mã hóa | Chứa |
|---|---|---|
| Header | JSON base64url | Thuật toán ký (alg) và loại token (typ) |
| Payload | JSON base64url | Các claim: dữ liệu thực sự của token |
| Signature | Byte base64url | Bằng chứng header và payload chưa bị thay đổi |
Các thuật toán ký phổ biến
| Giá trị alg | Loại | Ghi chú |
|---|---|---|
| HS256 | Đối xứng, secret dùng chung | Phổ biến cho một ứng dụng vừa phát hành vừa kiểm tra token của chính nó |
| RS256 | Bất đối xứng, RSA | Phổ biến khi một bên khác cần xác thực token, như OAuth |
| ES256 | Bất đối xứng, đường cong elliptic | Chữ ký ngắn hơn RSA với cùng mức bảo mật |
| none | Không có chữ ký | Một bộ xác thực luôn nên từ chối thuật toán này |
Các claim chuẩn, theo RFC 7519
- exp, nbf và iat đều là giá trị NumericDate: số giây trọn vẹn kể từ Unix epoch, không bao giờ là mili giây.
- aud có thể là một chuỗi đơn hoặc một mảng chuỗi, khi một token dành cho nhiều hơn một audience.
- jti được thiết kế để duy nhất cho mỗi token, đó là điều giúp việc chặn (blocklist) một token cụ thể trở nên khả thi.
- Không có claim chuẩn nào là bắt buộc. Một token có thể chỉ mang các claim tùy chỉnh mà một ứng dụng tự định nghĩa.
Câu hỏi thường gặp về Giải mã JWT
Ba phần của một JWT là gì?
Một header, một payload và một chữ ký, mỗi phần được mã hóa base64url và nối bằng dấu chấm. Header nêu thuật toán ký, payload chứa các claim, và chữ ký giúp server kiểm tra ai đã phát hành token.
Công cụ này có xác thực chữ ký không?
Không. Nó chỉ giải mã header và payload, không bao giờ kiểm tra chữ ký. Hãy xác thực token trên server của bạn bằng secret hoặc public key trước khi tin tưởng chúng. Token bạn dán không bao giờ rời khỏi trình duyệt.
Payload của một JWT có được mã hóa không?
Không, với một JWT có chữ ký thông thường. Nó chỉ được encode, nên bất kỳ ai giữ token đều đọc được, đó là lý do mật khẩu và dữ liệu riêng tư không bao giờ nên đặt trong đó. Token đã mã hóa (JWE) có năm phần và cần khóa.
exp, iat và nbf nghĩa là gì?
Đó là thời gian tính bằng giây kể từ ngày 1 tháng 1 năm 1970 (UTC). exp là lúc token hết hạn, iat là lúc nó được phát hành, và nbf là thời điểm trước đó token chưa được chấp nhận.
Vì sao token của tôi hiện là đã hết hạn?
Thời điểm exp của nó sớm hơn đồng hồ thiết bị của bạn. Access token thường chỉ tồn tại 5 đến 60 phút, nên hãy xin một token mới, và kiểm tra đồng hồ máy tính của bạn có đúng giờ không.
RFC 7519 định nghĩa điều gì?
Nó định nghĩa chính định dạng JWT: ba phần base64url nối bằng dấu chấm, và ý nghĩa của các claim chuẩn như iss, sub, exp và aud. Nó không yêu cầu bất kỳ thuật toán ký cụ thể nào.
Một JWT có thể bị thu hồi trước khi hết hạn không?
Không thể tự thân token làm được, vì nó chỉ là dữ liệu đã ký. Thu hồi sớm một token cần hỗ trợ phía server, như một blocklist dựa theo claim jti, hoặc thời hạn ngắn kết hợp với một refresh token riêng.
Vì sao exp và iat hiện thành số lớn thay vì ngày tháng?
Chúng được lưu trong token dưới dạng giá trị NumericDate, tính bằng số giây trọn vẹn kể từ Unix epoch (1 tháng 1 năm 1970 UTC). Trang này hiện số thô cạnh một ngày dễ đọc để tiện theo dõi.