Tạo JWT
Tạo JWT có chữ ký với header, payload và khóa tùy chỉnh. Hỗ trợ HS256, RS256, ES256.
JWT là gì?
JWT (JSON Web Token, RFC 7519) là tiêu chuẩn mở để truyền thông tin an toàn dưới dạng đối tượng JSON nhỏ gọn. Gồm ba phần cách nhau bởi dấu chấm: Header.Payload.Signature.
Các trường hợp sử dụng phổ biến của JWT?
JWT được sử dụng rộng rãi cho xác thực (single sign-on), ủy quyền API và trao đổi thông tin an toàn. Sau đăng nhập, server phát JWT mà client đính kèm trong các yêu cầu tiếp theo.
Chọn giữa HS256, RS256 và ES256 như thế nào?
HS256 dùng bí mật chung và nhanh nhất, phù hợp dịch vụ đơn. RS256 dùng cặp khóa RSA, tốt hơn cho kiến trúc đa dịch vụ. ES256 dùng khóa đường cong elliptic, bảo mật cao với chữ ký ngắn hơn.
Claims trong JWT là gì?
Claims là các tuyên bố trong payload. Claims đã đăng ký gồm iss (nhà phát hành), sub (chủ đề), exp (hết hạn), aud (đối tượng). Claims công khai có thể đăng ký tại IANA. Claims riêng là trường tùy chỉnh.
Làm thế nào để xác minh JWT?
Giải mã header để lấy thuật toán, sau đó dùng khóa phù hợp (bí mật chung cho HMAC, khóa công khai cho RSA/ECDSA) để xác minh chữ ký. Kiểm tra cả exp, iss và aud.
Tạo JWT trong trình duyệt có an toàn không?
Có, công cụ này dùng Web Crypto API. Khóa và token không rời khỏi trình duyệt. Không có dữ liệu nào được gửi đến máy chủ.
Sự khác biệt giữa mã hóa và ký?
Mã hóa (Base64) chỉ chuyển đổi dữ liệu sang định dạng truyền tải được và ai cũng có thể giải mã. Ký tạo ra băm mật mã chứng minh token không bị thay đổi.
JWT có thể được mã hóa không?
Có, JWE (JSON Web Encryption) mã hóa nội dung payload. JWT tiêu chuẩn (JWS) chỉ đảm bảo tính toàn vẹn, nhưng payload có thể đọc được bởi bất kỳ ai có token.
Thực tiễn bảo mật tốt nhất cho JWT?
Luôn đặt thời gian hết hạn ngắn. Dùng bí mật mạnh, ngẫu nhiên cho HMAC. Lưu khóa riêng tư an toàn. Không đưa dữ liệu nhạy cảm vào payload. Sử dụng HTTPS trong production.
JWT so với xác thực dựa trên session?
JWT không trạng thái — server không lưu dữ liệu session, lý tưởng cho microservices và kịch bản cross-domain. Session cần lưu trữ phía server nhưng cho phép thu hồi ngay lập tức.
JWT có phù hợp cho đăng xuất và quản lý session?
JWT không trạng thái theo thiết kế, nên đăng xuất cần cơ chế bổ sung như danh sách chặn hoặc token ngắn hạn kèm refresh token. Sử dụng access token ngắn hạn (ví dụ 15 phút).
Mô hình refresh token hoạt động với JWT như thế nào?
Dùng access token ngắn hạn (JWT) cho lời gọi API và refresh token dài hơn để lấy access token mới. Khi access token hết hạn, client gửi refresh token để nhận JWT mới.
Thuật toán "none" là gì?
Thuật toán "none" nghĩa là JWT không được ký. Chỉ dùng cho mục đích thử nghiệm. Nhiều thư viện vô hiệu hóa nó theo mặc định.
JWT có giới hạn kích thước không?
JWT không có giới hạn kích thước cố định, nhưng vì được gửi trong header HTTP, nên giữ dưới 4KB. Giữ payload tối giản.