Mã hóa / giải mã JWT
Dán token để đọc header và payload, hoặc ký token từ claims của bạn — không nút bấm, không tải lên.
Tùy chọn khi giải mã (điền vào để xác minh), bắt buộc để ký.
Chữ ký:
Token
Header
Payload
Cách sử dụng
- Dán token: header và payload hiện ra ngay, không có nút nào để bấm. Mọi thứ đến từ token được giữ đúng như lúc được ký — đầu vào không bao giờ bị viết lại.
- Thêm secret bên dưới ô nhập để kiểm tra chữ ký. Để trống nghĩa là “chưa xác minh”: bạn vẫn đọc được các claim như chúng vốn có.
- Chuyển sang Mã hóa, viết claims dạng JSON, chọn HS256/384/512 và một secret, rồi sao chép token tạo ra. Chuyển chế độ không bao giờ xóa những gì bạn đã nhập.
- Các claim chuẩn exp / iat / nbf được diễn giải theo ngôn ngữ và múi giờ của bạn, kèm dấu đã hết hạn và chưa có hiệu lực.
Ví dụ
Token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q
Header và payload
Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload
{
"sub": "u-1024",
"name": "Jane Cooper",
"role": "editor",
"iss": "https://api.example.com",
"iat": 1767225600,
"exp": 1798761600
}Token được ký bằng secret “dev-secret-change-me”; hãy nhập secret đó vào ô Secret và dòng trạng thái sẽ đổi thành “Chữ ký đã được xác minh”. Chuyển sang Mã hóa và bấm Mẫu để nhận đúng payload này: với cùng secret, công cụ dựng lại chính xác token này, từng ký tự.
Quy tắc, giới hạn và các vấn đề đã biết
- Chỉ hỗ trợ HS256, HS384 và HS512, cho cả ký lẫn xác minh. Token RS*, ES* và PS* vẫn được giải mã và hiển thị nguyên trạng, nhưng chữ ký không bao giờ được kiểm tra — việc đó cần khóa công khai, nên dòng trạng thái nói rõ thay vì đoán.
- Token không ký (alg: none) được giải mã và gắn cảnh báo rõ ràng, nhưng không bao giờ được tạo ra: yêu cầu ký mà không có secret sẽ báo lỗi chứ không trả token không ký.
- Chế độ mã hóa tự dựng header (`{"alg": … ,"typ": "JWT"}`). Các trường header như kid, jku, x5c hay cty không được mang theo — công cụ này ký claims, không ký chuỗi chứng chỉ.
- JSON claims của bạn được tuần tự hóa lại gọn trước khi ký, nên thụt lề và chú thích không lọt vào token. Thứ tự khóa theo đối tượng JavaScript: khóa trùng gộp về khóa cuối, và khóa trông như số được đưa lên đầu.
- Số nguyên rất lớn bị mất độ chính xác — `12345678901234567890` quay về dạng làm tròn, vì số JavaScript là như vậy. Không có gì được tự động sửa; hãy dùng chuỗi khi các chữ số chính xác quan trọng.
- Claims được hiển thị có thụt lề để dễ đọc, trong khi chữ ký phủ lên các đoạn thô đúng như chúng xuất hiện trong token. Không có gì được mã hóa lại sau lưng bạn, nên token xác minh được ở đây cũng xác minh được trong mã của bạn.
- Base64url được kiểm tra nghiêm ngặt: `+`, `/` và `=` bị báo lỗi thay vì lặng lẽ chấp nhận, và các byte không phải UTF-8 được báo lỗi thay vì thay bằng ký tự thay thế. Khoảng trắng trong token được dán sẽ bị bỏ qua, vì token không bao giờ chứa chúng.
- JWE đã mã hóa (năm phần) không được giải mã — bạn sẽ được cho biết đó chính là thứ bạn đã dán.
- Giới hạn kích thước 10.000 ký tự. Không có gì được tải lên, lưu trữ, ghi vào URL hay chia sẻ: nút chia sẻ chỉ chia sẻ địa chỉ trang này, không bao giờ chia sẻ token hay secret của bạn.
Công cụ liên quan
Khi đã đọc được các claim, đây là những bước thường làm tiếp.