Xưởng Token
Privacy FirstKiểm tra và tạo JWT/JWK/JWKS.
Header
Payload
Signature
JWT là gì?
JSON Web Token (JWT) là một cách gọn nhẹ, an toàn với URL để biểu diễn các claim được truyền giữa hai bên. Một JWT gồm ba phần mã hóa Base64URL ngăn cách bởi dấu chấm: Header (thuật toán và loại), Payload (claim), và Signature. Chữ ký đảm bảo token không bị can thiệp. JWT thường được dùng để xác thực và trao đổi thông tin trong các API web. Các claim chuẩn bao gồm sub (subject), iss (issuer), aud (audience), exp (expiration), nbf (not before), iat (issued at), và jti (JWT ID).
Thuật toán JWT
HS256/384/512 sử dụng HMAC với SHA-2 và một khóa bí mật dùng chung — đơn giản nhưng cả hai bên phải giữ cùng một khóa. RS256/384/512 sử dụng chữ ký bất đối xứng RSA PKCS#1 v1.5 — lý tưởng cho kiến trúc microservice nơi các dịch vụ chỉ cần khóa công khai. ES256/384/512 sử dụng ECDSA với các đường cong NIST cho chữ ký nhỏ hơn RSA với mức bảo mật tương đương. PS256/384/512 sử dụng RSA-PSS, một biến thể xác suất được ưu tiên hơn RS* trong các hệ thống hiện đại.
JWK và JWKS
JSON Web Key (JWK) là một cấu trúc JSON đại diện cho một khóa mật mã. JWK Set (JWKS) là một cấu trúc JSON chứa một mảng các JWK dưới thuộc tính keys. Các dịch vụ công bố JWKS của họ tại một URL nổi tiếng (vd: /.well-known/jwks.json), cho phép client lấy khóa công khai để xác minh JWT mà không cần trao đổi khóa ngoài băng thông. Các khóa trong JWKS được xác định bằng kid (Key ID) của chúng, mà header JWT tham chiếu đến.
Thực hành bảo mật tốt nhất
Luôn xác thực các claim exp, nbf, iss, và aud ở phía máy chủ. Không bao giờ sử dụng thuật toán alg: none trong production — nó loại bỏ toàn bộ bảo vệ chữ ký. Ưu tiên các thuật toán bất đối xứng (RS*, ES*, PS*) hơn HMAC khi nhiều dịch vụ cần xác minh token. Xoay vòng khóa thường xuyên và sử dụng kid để xác định khóa nào được dùng để ký từng token. Lưu trữ khóa riêng tư an toàn — không bao giờ commit chúng vào hệ thống quản lý phiên bản. Sử dụng thời gian hết hạn ngắn và refresh token thay vì JWT tồn tại lâu.