Cách sử dụng
- Chọn HS256, HS384 hoặc HS512.
- Sửa các claim trong payload, rồi nhấp “Đặt iat và exp” để thêm thời gian hiện tại và thời gian hết hạn.
- Nhập secret thử nghiệm hoặc tạo một secret ngẫu nhiên 256 bit.
- Sao chép token đã ký. Để kiểm tra token, hãy chuyển sang “Xác minh chữ ký”, dán token và nhập secret.
Cách hoạt động
Một JSON Web Token (RFC 7519) gồm ba phần được mã hóa Base64URL: header, payload chứa các claim và chữ ký. Với các thuật toán HMAC HS256, HS384 và HS512, chữ ký là HMAC dùng SHA-256, SHA-384 hoặc SHA-512 trên “header.payload”, với khóa là một bí mật dùng chung. Ai có bí mật đó đều có thể tạo và xác minh token.
Công cụ tuần tự hóa header và payload thành JSON gọn, mã hóa chúng và ký bằng crypto.subtle, Web Crypto API có sẵn trong trình duyệt của bạn. Trường alg trong header luôn khớp với thuật toán đã chọn, typ mặc định là JWT, và các trường header khác như kid được giữ nguyên. “Đặt iat và exp” ghi thời gian hiện tại thành iat (issued at) và thêm thời hạn đã chọn thành exp, đều tính bằng giây kể từ 1 tháng 1 năm 1970 UTC. Kết quả khớp với các thư viện JWT khác; ví dụ, token mẫu kinh điển trên jwt.io được tạo lại chính xác.
Bí mật có thể là văn bản thuần túy (các byte UTF-8 của nó làm khóa) hoặc các byte mã hóa Base64/Base64URL, vốn được nhiều framework dùng. Nút tạo bí mật ngẫu nhiên tạo 32 byte ngẫu nhiên bằng crypto.getRandomValues. Với HS256, hãy dùng ít nhất 32 byte ngẫu nhiên; bí mật ngắn do con người tự đặt có thể bị đoán ngoại tuyến từ bất kỳ token nào.
Việc xác minh giải mã token, kiểm tra xem token có dùng thuật toán HMAC hay không, và tính lại chữ ký bằng crypto.subtle.verify. Nó cũng cho biết khi nào exp hoặc nbf khiến token hết hạn hoặc chưa có hiệu lực. RS256, ES256 và các thuật toán khóa công khai khác không được hỗ trợ, và việc xác minh ở đây không kiểm tra issuer, audience hay các claim khác mà ứng dụng của bạn có thể yêu cầu.
Ví dụ
Kiểm thử API cục bộ
Máy chủ phát triển của bạn yêu cầu token HS256 được ký bằng “dev-secret-change-me”. Đặt sub thành một ID người dùng thử nghiệm, nhấp “Đặt iat và exp” với 1 giờ, nhập bí mật và gửi token trong header Authorization: Bearer.
Kiểm tra secret nào đã ký token
Một token staging bị từ chối. Hãy dán token vào “Xác minh chữ ký” và thử secret staging: “Chữ ký không hợp lệ” cho biết token được ký bằng một secret khác hoặc secret ở định dạng khác (văn bản so với Base64).
Tạo lại mẫu jwt.io
Với header {"alg":"HS256","typ":"JWT"}, payload {"sub":"1234567890","name":"John Doe","iat":1516239022} và secret “your-256-bit-secret”, token có phần cuối là SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, giống như trên jwt.io.
Câu hỏi thường gặp
Secret của tôi có bị gửi đến máy chủ của bạn không?
Không. Việc ký và xác minh chạy bằng Web Crypto API ngay trong trình duyệt của bạn, và secret không được lưu trữ hoặc gửi đi bất kỳ đâu. Chúng tôi vẫn khuyến nghị chỉ dùng secret để thử nghiệm, vì secret ký thật không bao giờ nên được nhập vào một trang web.
Tại sao chữ ký không hợp lệ dù secret đã đúng?
Hãy kiểm tra định dạng secret. Một số hệ thống dùng văn bản của secret, số khác giải mã Base64 trước nên tạo ra các byte khóa khác nhau. Cũng hãy kiểm tra token không bị thay đổi và đang dùng cùng một thuật toán.
Tôi có thể tạo token RS256 hoặc ES256 không?
Công cụ này thì không. Công cụ chỉ hỗ trợ các thuật toán HMAC dùng chung secret: HS256, HS384 và HS512.
Payload có được mã hóa không?
Không. Một JWT đã ký chỉ được encode; bất kỳ ai cũng có thể decode và đọc payload. Chữ ký chỉ chứng minh token không bị thay đổi. Đừng đặt mật khẩu hoặc secret khác vào payload.
Quyền riêng tư
Token chỉ được tạo và xác minh trong trình duyệt của bạn bằng Web Crypto API. Header, payload, token và secret không được tải lên, lưu trữ hoặc đưa vào dữ liệu phân tích.