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.