Giải mã & ký JWT API
Giải mã mọi JWT, kiểm tra hạn dùng và xác thực chữ ký bằng secret, PEM hoặc JWK – hoặc ký token mới với HS256/384/512, RS, PS, ES.
API JWT giúp giải mã, xác thực và tạo JSON Web Token. Ở chế độ decode (mặc định), bạn gửi token – tiền tố Bearer sẽ được bỏ tự động – và nhận về header, payload dạng JSON cùng các claim dễ đọc: issued_at, expires_at, not_before theo định dạng ISO, và token đã expired (hết hạn) hay not_yet_valid (chưa có hiệu lực).
Thêm secret (khoá HMAC dùng chung, hoặc public key RSA/EC dạng PEM PUBLIC KEY hay JWK) để xác thực chữ ký: signature_valid cho biết chữ ký có khớp không, còn valid chỉ là true khi chữ ký đúng và token đang trong thời hạn hiệu lực. Hỗ trợ HS256/384/512, RS256/384/512, PS256/384/512 và ES256/384/512.
Ở chế độ sign (action=sign, hoặc chỉ cần gửi payload), API tạo token đã ký từ payload JSON với thuật toán algorithm (mặc định HS256) và secret (khoá HMAC, hoặc PEM PRIVATE KEY PKCS#8 / JWK private cho thuật toán bất đối xứng). expires_in (giây) tự thêm claim iat và exp. Endpoint chỉ nhận POST để token và khoá không bao giờ nằm trong URL.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
action | body | string | không | decode | decode hoặc sign. Mặc định là sign nếu có gửi payload. |
token | body | string | không | decode: JWT cần giải mã (chấp nhận tiền tố Bearer ). | |
secret | body | string | không | Khoá HMAC, hoặc khoá PEM / JWK (public key để xác thực, private key PKCS#8 để ký). Tên khác key khi decode. Bắt buộc khi ký. | |
payload | body | object | không | sign: đối tượng JSON chứa các claim (hoặc chuỗi JSON). | |
algorithm | body | string | không | HS256 | sign: HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512. |
expires_in | body | number | không | sign: thời gian sống tính bằng giây; tự thêm claim iat và exp. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/jwt" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3OTQyODczMTQsImV4cCI6MTc5NDI5MDkxNCwic3ViIjoidXNlcl8xMjMiLCJyb2xlIjoiYWRtaW4ifQ.Dle3BtqLL449n-RirNMbP23azwGNJ57klSgX2-x1rH4","secret":"my-secret"}'const res = await fetch('https://apibox.io.vn/v1/jwt', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3OTQyODczMTQsImV4cCI6MTc5NDI5MDkxNCwic3ViIjoidXNlcl8xMjMiLCJyb2xlIjoiYWRtaW4ifQ.Dle3BtqLL449n-RirNMbP23azwGNJ57klSgX2-x1rH4",
"secret": "my-secret"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/jwt",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3OTQyODczMTQsImV4cCI6MTc5NDI5MDkxNCwic3ViIjoidXNlcl8xMjMiLCJyb2xlIjoiYWRtaW4ifQ.Dle3BtqLL449n-RirNMbP23azwGNJ57klSgX2-x1rH4", "secret": "my-secret"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/jwt');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3OTQyODczMTQsImV4cCI6MTc5NDI5MDkxNCwic3ViIjoidXNlcl8xMjMiLCJyb2xlIjoiYWRtaW4ifQ.Dle3BtqLL449n-RirNMbP23azwGNJ57klSgX2-x1rH4","secret":"my-secret"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"iat": 1794287314,
"exp": 1794290914,
"sub": "user_123",
"role": "admin"
},
"claims": {
"issued_at": "2026-11-10T05:08:34.000Z",
"expires_at": "2026-11-10T06:08:34.000Z",
"not_before": null,
"expired": false,
"not_yet_valid": false
},
"signature_valid": true,
"valid": true
}
Ứng dụng
- Debug lỗi đăng nhập bằng cách xem claim trong access token
- Tìm nguyên nhân token bị từ chối: hết hạn, chưa hiệu lực hay sai chữ ký
- Tạo token test cho môi trường dev và kiểm thử tích hợp
- Xác thực token từ nhà cung cấp định danh bên thứ ba bằng public key
Hỏi đáp
Dán token vào đây có an toàn không?
Token và secret chỉ được xử lý trong bộ nhớ trên Cloudflare Workers, không được lưu lại. Dù vậy, hãy cẩn trọng với secret production: ưu tiên token test và đổi ngay secret nếu nghi bị lộ.
Xác thực token RS256 thế nào?
Gửi POST {"token": "eyJ...", "secret": "-----BEGIN PUBLIC KEY-----..."}. Public key dạng JWK (chuỗi JSON) cũng dùng được. Thuật toán được đọc từ header của token.
Vì sao "valid" trả về null?
Vì bạn chưa gửi secret hoặc key nên không thể kiểm tra chữ ký. Token chỉ được giải mã; signature_valid và valid sẽ là null cho đến khi có khoá.
API liên quan
Tạo mã hash
Tính MD5, SHA-1, SHA-256, SHA-384, SHA-512 và CRC32 của chuỗi hoặc file trong một lần gọi, xuất hex hoặc base64, hỗ trợ ký HMAC.
B64Mã hoá / Giải mã
Mã hoá hoặc giải mã chuỗi sang Base64, Base64URL, hex, URL encode, HTML entity, Unicode escape, ROT13 hay nhị phân chỉ với một lần gọi API.
***Tạo mật khẩu
Tạo mật khẩu ngẫu nhiên an toàn bằng CSPRNG (4–256 ký tự, tối đa 100 cái mỗi lần) hoặc kiểm tra độ mạnh, entropy và thời gian bẻ khoá của mật khẩu.