Công cụ giải mã JWT

Đọc claims và hạn dùng của JWT, kiểm tra chữ ký HS256, HS384, HS512.

Giải mã không phải là xác minh. Ai cũng đọc hoặc làm giả được nội dung token; chỉ kiểm tra chữ ký mới cho biết token có bị sửa hay không.

Không bắt buộc. Chỉ dùng trên trang này và không gửi đi đâu.

Dán một token để đọc.

Công cụ này làm gì

JSON Web Token (JWT) là chuỗi dài gồm chữ cái và dấu chấm mà nhiều API và hệ thống đăng nhập trả về sau khi bạn đăng nhập. Công cụ này mở nó ra: hiển thị header và payload dưới dạng JSON dễ đọc, đổi các claim thời gian thành ngày giờ thật theo múi giờ của bạn và cho biết token đã hết hạn chưa. Nếu token được ký bằng khóa bí mật dùng chung (HS256, HS384 hoặc HS512), bạn có thể nhập khóa để kiểm tra luôn chữ ký. Token được đọc ngay trong trình duyệt và không gửi đi đâu, điều quan trọng vì một token còn hiệu lực chính là chìa khóa vào tài khoản của ai đó.

Giải mã không phải là xác minh

Đây là điều quan trọng nhất về JWT. Header và payload chỉ được mã hóa Base64URL, không hề bị mã hóa bảo mật, nên ai có token cũng đọc được, và ai cũng có thể tự viết một token với nội dung tùy ý. Thấy "admin": true trong token đã giải mã không chứng minh được gì. Chỉ kiểm tra chữ ký mới cho thấy token do người biết khóa bí mật hoặc khóa riêng tạo ra và không bị sửa sau đó. Máy chủ phải xác minh chữ ký ở mọi yêu cầu và tự quyết định thuật toán nào được chấp nhận, không bao giờ tin trường alg trong token; token alg: none là token không ký và là một kiểu tấn công kinh điển.

Ba phần của token

Token gồm ba chuỗi Base64URL nối bằng dấu chấm: header.payload.signature. Với token mẫu nổi tiếng, header là {"alg":"HS256","typ":"JWT"} và payload là {"sub":"1234567890","name":"John Doe","iat":1516239022}. Chữ ký là HMAC 32 byte của hai phần đầu. Bạn có thể thử ngay: với khóa your-256-bit-secret token mẫu hợp lệ, với khóa khác thì không. Nhấn Ví dụ để thử.

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

Ba claim chứa thời gian, đều là số giây kể từ 0 giờ ngày 1/1/1970 UTC:

  • exp là lúc token hết hiệu lực. Từ thời điểm này trở đi token phải bị từ chối.
  • nbf (not before) là lúc token bắt đầu có hiệu lực.
  • iat (issued at) là lúc token được tạo.

Công cụ hiển thị mỗi mốc theo múi giờ của bạn, theo ISO 8601 UTC và dạng tương đối như "3 ngày trước". Với iat 1516239022 và exp 1516242622, hai mốc là 01:30:22 và 02:30:22 UTC ngày 18/1/2018, tức token sống đúng một giờ. Lỗi hay gặp là ghi exp bằng mili giây: khi đó nó nằm ở tương lai hàng chục nghìn năm. Nếu claim không phải số giây hợp lệ, công cụ báo thay vì hiện một ngày sai.

Kiểm tra chữ ký

Với HS256, HS384 và HS512, chữ ký là HMAC dùng SHA-256, SHA-384 hoặc SHA-512 trên header.payload với khóa bí mật. Hãy nhập khóa, hoặc bật tùy chọn Base64URL nếu hệ thống của bạn lưu khóa ở dạng đó. Việc kiểm tra dùng Web Crypto của trình duyệt và khóa không rời khỏi trang. Token ký bằng RS256, ES256 và các thuật toán tương tự dùng khóa riêng và được kiểm tra bằng khóa công khai, điều công cụ này không làm; nó nói rõ thay vì đoán.

Vấn đề thường gặp

  • "JWT có ba phần." Bạn sao chép thiếu, hoặc dính xuống dòng hay dấu ngoặc kép. Công cụ tự bỏ chữ Bearer ở đầu và khoảng trắng xung quanh.
  • Base64URL hoặc JSON không hợp lệ. Token bị cắt cụt hoặc không phải JWT.
  • Năm phần. Đó là token mã hóa (JWE), không đọc được nếu không có khóa.
  • Chữ ký hợp lệ nhưng báo "Đã hết hạn". Chữ ký không sao; token đơn giản là quá cũ. Đồng hồ các máy chủ lệch một hai phút là chuyện thường nên nhiều hệ thống cho phép một khoảng dung sai nhỏ.

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

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

Token được giải mã trong trình duyệt và không bị tải lên. Dù vậy, hãy coi token đang dùng như mật khẩu: nên dùng token thử nghiệm hoặc token đã hết hạn, và đừng chia sẻ token còn hiệu lực.

Giải mã được JWT có chứng minh nó là thật không?

Không. Nội dung chỉ được mã hóa nên ai cũng đọc hoặc làm giả được. Chỉ kiểm tra chữ ký bằng đúng khóa mới cho biết token xác thực và không bị sửa.

Vì sao không kiểm tra được token RS256 hoặc ES256?

Các thuật toán đó ký bằng khóa riêng và xác minh bằng khóa công khai tương ứng. Công cụ này chỉ kiểm tra các thuật toán khóa chung HS256, HS384 và HS512.

exp, iat và nbf nghĩa là gì?

exp là thời điểm hết hạn, iat là lúc phát hành và nbf là thời điểm trước đó token không được chấp nhận. Cả ba là số giây kể từ 1/1/1970 UTC.