JWT Giải mã / Mã hóa
Giải mã bất kỳ JSON Web Token nào để xem header, payload và chữ ký, xác thực chữ ký tạo bằng khóa bí mật HMAC hoặc khóa RSA, RSA-PSS, ECDSA, hoặc tạo một token mới có ký từ đầu. Việc ký và xác thực dùng Web Crypto API của trình duyệt, nên token, khóa bí mật và khóa riêng không bao giờ rời khỏi máy của bạn.
Các bước sử dụng
- Chọn chế độ ở phía trên: Giải mã để đọc một token có sẵn, hoặc Mã hóa để tạo token mới.
- Ở chế độ giải mã, dán token vào ô Token đã mã hóa (dùng nút Dán hoặc Ctrl+V). Header, payload và chữ ký được tô màu riêng, và bảng thông tin hiển thị trạng thái, thuật toán, loại, thời gian tạo, hạn dùng và chủ thể.
- Để xác thực, xem thẻ Xác thực chữ ký — thẻ này hiện
algcủa token và yêu cầu khóa tương ứng. Với HS256/HS384/HS512, nhập khóa bí mật dùng chung. Với token RS, PS hoặc ES, dán khóa công khai — dạng khối PEM (-----BEGIN PUBLIC KEY-----) hoặc một đối tượng JSON JWK — hoặc nhập URL JWKS rồi bấm nút Tải về để tải khóa từ đó. - Bấm Xác thực — nhãn Chữ ký hợp lệ màu xanh hoặc Chữ ký không hợp lệ màu đỏ sẽ xuất hiện.
- Xem các claim đã giải mã trong thẻ HEADER và PAYLOAD; chuyển giữa tab Bảng và tab JSON, dùng biểu tượng sao chép để lấy bất kỳ giá trị nào.
- Ở chế độ mã hóa, chọn Thuật toán, rồi chỉnh sửa JSON của HEADER và PAYLOAD. Với thuật toán HMAC, nhập khóa bí mật vào ô SECRET; với RSA, RSA-PSS và ECDSA, dán khóa riêng vào ô KHÓA RIÊNG, hoặc bấm nút Tạo cặp khóa thử để tạo một cặp khóa.
- Token được tạo lại tự động khi bạn gõ — sao chép nó từ khung Token đã tạo, nơi cũng hiển thị header và payload đã giải mã của token.
Mẹo
- Ký và xác thực được với HS256/384/512 (khóa bí mật dùng chung), RS256/384/512 (RSA PKCS#1 v1.5), PS256/384/512 (RSA-PSS) và ES256/384/512 (ECDSA trên P-256, P-384, P-521). Token EdDSA (Ed25519) chỉ giải mã được, không xác thực hay ký ở đây.
- Chọn
none (unsecured)ở chế độ mã hóa sẽ tạo token không có chữ ký (phần chữ ký để trống); tokennonekhông thể xác thực ở chế độ giải mã. - Khóa công khai nhận dạng PEM SPKI (
BEGIN PUBLIC KEY), khóa riêng nhận dạng PEM PKCS#8 (BEGIN PRIVATE KEY); cả hai đều có thể là đối tượng JSON JWK — công cụ coi nội dung là JWK khi nó bắt đầu bằng{. - Nút Tải về chọn khóa có
kidtrùng vớikidtrong header của token; nếu token không cókid, khóa đầu tiên trong tập sẽ được dùng. JWK tải về được điền vào ô khóa để bạn thấy chính xác khóa nào sẽ được kiểm tra. - Nút Tạo cặp khóa thử tạo khóa RSA 2048-bit mới (RS/PS) hoặc khóa EC trên đường cong ứng với ES256/384/512, điền vào ô khóa riêng và hiển thị khóa công khai tương ứng — dán khóa đó vào chế độ giải mã để thử trọn vòng. Cặp khóa không được lưu ở đâu cả, nên chỉ dùng để thử nghiệm.
- Khi đổi thuật toán ở chế độ mã hóa, trường
algtrong header được cập nhật tự động. - Chú ý dòng hạn dùng: token hết hạn hiển thị nhãn Hết hạn màu đỏ, còn token còn hiệu lực hiển thị nhãn Còn hiệu lực màu xanh.
- Các claim
exp,iatvànbfđược tự động hiển thị dưới dạng ngày giờ dễ đọc bên cạnh giá trị Unix timestamp gốc.
Câu hỏi thường gặp
Những thuật toán nào có thể xác thực và ký?
HS256/384/512, RS256/384/512, PS256/384/512 và ES256/384/512 — tất cả những gì Web Crypto API của trình duyệt hỗ trợ cho JWT. Token EdDSA chỉ có thể giải mã và xem, còn token none không có chữ ký để kiểm tra.
Vì sao token tôi tin là đúng lại báo "Chữ ký không hợp lệ"?
Thường là do khóa. Xác thực cần khóa công khai (không phải khóa riêng) dạng PEM BEGIN PUBLIC KEY hoặc JWK. Khối PKCS#1 như BEGIN RSA PUBLIC KEY, BEGIN RSA PRIVATE KEY và chứng chỉ (BEGIN CERTIFICATE) không được chấp nhận, và khóa không nhập được sẽ bị báo là không hợp lệ thay vì một lỗi riêng. Hãy chuyển đổi trước — ví dụ openssl pkcs8 -topk8 -nocrypt cho khóa riêng, hoặc openssl x509 -pubkey -noout để lấy khóa công khai từ chứng chỉ.
Vì sao nút Tải về không tải được URL JWKS của tôi?
Thông báo lỗi dưới ô nhập cho biết lý do: mã lỗi HTTP, tập khóa rỗng, hoặc không có khóa nào trùng kid của token. Nếu máy chủ không cho phép truy cập khác nguồn, trình duyệt sẽ chặn việc tải với một lỗi mạng chung chung. Khi đó, hãy tự mở URL JWKS và dán đúng đối tượng khóa cần dùng (không phải cả tập {"keys": [...]}) vào ô khóa.
Tôi có cần bấm nút để tạo token ở chế độ mã hóa không?
Không. Token được dựng lại theo thời gian thực mỗi khi bạn thay đổi thuật toán, header, payload, khóa bí mật hoặc khóa riêng. Chỉ cần chỉnh sửa các ô và sao chép kết quả từ khung Token đã tạo.
Token của tôi báo "JWT không hợp lệ" — bị lỗi gì?
Một JWT phải có đúng ba phần ngăn cách bằng dấu chấm và phần header, payload phải là JSON được mã hóa Base64URL hợp lệ. Thông báo lỗi cho biết token bị sai số lượng phần hay JSON không phân tích được.