TanodTools
VI

Giải mã JWT

Dán một JSON Web Token để đọc header và payload, với thời điểm hết hạn và phát hành hiển thị dưới dạng ngày giờ thực.

Chạy hoàn toàn trong trình duyệt của bạn

Token tối đa 1 MB. Chỉ giải mã: chữ ký được hiển thị nhưng không được kiểm tra.

Cách giải mã JWT

  1. Dán token vào ô. Tiền tố Bearer ở đầu cùng khoảng trắng hoặc dấu nháy xung quanh sẽ bị bỏ qua.
  2. Đọc header và payload bên dưới, cùng các thời điểm hết hạn, bắt đầu hiệu lực và phát hành theo múi giờ của bạn và theo UTC.
  3. Sao chép payload hoặc header đã giải mã dưới dạng JSON đã định dạng nếu bạn cần dùng ở nơi khác.

Bên trong một JSON Web Token có gì

JWT đã ký gồm ba đoạn văn bản Base64url nối với nhau bằng dấu chấm: header, payload và chữ ký. Header và payload chỉ là JSON được viết dưới dạng Base64url, nên ai cũng đọc được. Base64url là một phép mã hóa dạng ký tự, không phải mã hóa bảo mật, vì vậy đừng bao giờ đặt bí mật vào payload của JWT trừ khi token được mã hóa.

Payload chứa các claim. Một số tên đã được đăng ký: iss (ai phát hành token), sub (token nói về ai), aud (token dành cho ai), exp (khi nào hết hạn), nbf (không hợp lệ trước thời điểm này), iat (thời điểm phát hành) và jti (ID duy nhất). Các dịch vụ thêm claim riêng của họ, như vai trò, scope hoặc địa chỉ email.

Chữ ký là thứ làm cho các claim đáng tin, và việc kiểm tra nó cần khóa ký, thứ chỉ bên phát hành và các dịch vụ chấp nhận token mới nên nắm giữ. Công cụ giải mã này cố ý dừng ở việc đọc: nó cho bạn thấy token nói gì và khi nào hết hạn, thường là đủ cho việc gỡ lỗi đăng nhập hoặc một lệnh gọi API.

Mẹo

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

Công cụ này có kiểm tra chữ ký không?

Không. Trang này chỉ giải mã token. Ai cũng có thể tạo token với header và payload bất kỳ, nên nội dung hiển thị ở đây là các claim, không phải bằng chứng. Chỉ dịch vụ nắm khóa ký (hoặc khóa công khai, với token RS256 và ES256) mới biết token có thật hay không, và nó còn phải kiểm tra thời hạn, audience và issuer.

Dán token vào đây có an toàn không?

Trang này không gửi token đi đâu cả: token được giải mã bằng mã chạy trong trình duyệt của bạn và không được lưu. Dù vậy, một access token còn hiệu lực chính là mật khẩu trong suốt thời gian nó còn hợp lệ. Tránh dán token môi trường thật vào bất kỳ trang web nào, và nên dùng token đã hết hạn hoặc token thử nghiệm khi gỡ lỗi.

Vì sao tôi không đọc được một số token?

Token có năm phần thay vì ba là JWT được mã hóa (JWE). Header đọc được, nhưng payload đã mã hóa và chỉ đọc được bằng khóa của bên nhận, nên công cụ này hiển thị header và giải thích các phần. Các lỗi khác, như sai số phần hoặc văn bản không phải Base64url hay JSON hợp lệ, được báo kèm điều gì đã sai.

Các thời điểm được tính như thế nào?

Các claim exp, nbf và iat là NumericDate: số giây kể từ 00:00 ngày 1 tháng 1 năm 1970 UTC. Chúng được hiển thị theo múi giờ của thiết bị bạn và theo UTC, và được so với đồng hồ của thiết bị để cho biết token đã hết hạn chưa. Nếu đồng hồ của bạn sai, các thời gian tương đối cũng sẽ sai. Giá trị trông giống mili giây sẽ được đánh dấu, vì đó là lỗi thường gặp.

alg, typ và kid nghĩa là gì?

alg là thuật toán ký, như HS256 (khóa bí mật dùng chung), RS256 hoặc ES256 (cặp khóa). typ thường là JWT. kid là ID khóa mà bên phát hành đã dùng, cho bên xác minh biết nên dùng khóa nào để kiểm tra chữ ký. Token có alg là none thì không có chữ ký và không bao giờ nên được chấp nhận cho bất kỳ việc gì quan trọng.