Giải mã JSON Web Token
JSON Web Token (JWT) là một chuỗi nhỏ gọn được dùng để truyền thông tin danh tính và quyền hạn giữa các hệ thống — thường gặp nhất dưới dạng header Authorization: Bearer sau khi đăng nhập. Nó trông giống như một đoạn văn bản ngẫu nhiên, nhưng thực chất gồm ba phần được mã hóa Base64URL: header, payload chứa các claim, và signature (chữ ký). Công cụ giải mã JWT này sẽ tách token, giải mã hai phần đầu thành định dạng JSON dễ đọc và giải thích các claim quan trọng. Quá trình giải mã và xác minh diễn ra cục bộ, do đó token của bạn không bao giờ bị gửi đi.
Tính năng
- Header và payload được giải mã và định dạng dễ nhìn, kèm theo nút sao chép cho mỗi phần.
- Giải thích các claim về thời gian:
iat,nbf,expvàauth_timeđược chuyển đổi từ giây epoch sang ngày giờ theo múi giờ của bạn. - Kiểm tra hạn sử dụng giúp bạn biết ngay token đã hết hạn hay chưa có hiệu lực.
- Xác minh chữ ký HMAC cho các thuật toán HS256, HS384 và HS512 bằng Web Crypto API của trình duyệt.
- Hoạt động ngoại tuyến sau khi tải trang; không có dữ liệu nào bị gửi đi.
Khi nào nên sử dụng
Gỡ lỗi xác thực. Khi request thất bại với lỗi 401 Unauthorized, hãy giải mã token để kiểm tra xem nó đã hết hạn chưa, có được cấp cho đúng đối tượng (aud) hay không, hoặc có chứa đúng các role và scope dự kiến không.
Xây dựng và kiểm thử API. Xác minh xem server của bạn đã đưa đúng các claim dự kiến vào token với thời gian hết hạn chính xác chưa, trước khi phát hành.
Tìm hiểu cách hoạt động của OAuth và OpenID Connect. ID token và access token từ các nhà cung cấp danh tính thường là JWT. Việc giải mã một token thử nghiệm sẽ cho thấy nhà cung cấp chia sẻ những thông tin gì về người dùng.
Cấu trúc của JWT
header.payload.signature
- Header — loại token và thuật toán ký, ví dụ
{"alg":"HS256","typ":"JWT"}. - Payload — chứa các claim. Các claim tiêu chuẩn bao gồm
iss(người phát hành),sub(chủ thể, thường là user ID),aud(đối tượng),exp,nbf,iatvàjti(token ID). Ứng dụng có thể thêm các claim tùy chỉnh nhưnamehoặcrole. - Signature — được tạo bằng cách ký
header.payloadvới một khóa bí mật (HMAC) hoặc khóa riêng tư (RSA, ECDSA, EdDSA). Nếu bất kỳ ai thay đổi dù chỉ một ký tự của header hoặc payload, chữ ký sẽ không còn khớp.
Vì payload chỉ được mã hóa (encode), tuyệt đối không đưa các thông tin bí mật như mật khẩu vào JWT. Để giải mã các dữ liệu Base64 khác, hãy sử dụng công cụ Base64; để kiểm tra bất kỳ timestamp nào, hãy dùng công cụ Chuyển đổi Unix Timestamp.