RevealTheme logo

Bộ giải mã JWT

Giải mã JSON Web Tokens (JWT) ngay lập tức. Chạy trong trình duyệt của bạn: các token không bao giờ rời khỏi thiết bị, nên an toàn để dùng với các bí mật của môi trường production.

Cách sử dụng công cụ này

  1. 1

    Dán JWT của bạn vào ô nhập.

  2. 2

    Nhấp Decode. Header và payload được phân tích và hiển thị.

  3. 3

    Kiểm tra thuật toán, các claim, thời hạn và bên phát hành.

JWT là gì và hoạt động như thế nào?

Một JSON Web Token (JWT, được định nghĩa trong RFC 7519) là một cách biểu diễn nhỏ gọn và an toàn cho URL của một tập hợp các claim về một người dùng, kèm theo bằng chứng mật mã rằng các claim đó không bị giả mạo. JWT là nền tảng xác thực trong hầu hết các ngăn xếp web hiện đại: khi bạn đăng nhập, máy chủ tạo một JWT chứa ID người dùng và quyền hạn của bạn, ký nó bằng một khóa bí mật và trả nó về cho bạn. Trình duyệt của bạn lưu trữ token (thường trong localStorage hoặc trong một cookie) và đính kèm nó vào header Authorization của mọi yêu cầu tiếp theo. Máy chủ xác minh chữ ký trên mỗi yêu cầu: nếu hợp lệ, các claim của token được tin cậy; nếu nó bị giả mạo, chữ ký sẽ bị phá vỡ và yêu cầu bị từ chối. JWT có ba phần được mã hóa bằng Base64URL và phân tách bằng dấu chấm: phần header khai báo thuật toán ký (HS256 cho HMAC-SHA256, RS256 cho RSA, ES256 cho ECDSA, none cho các token chưa ký, điều này nguy hiểm và bạn nên từ chối chúng); phần payload chứa các claim thực tế (các claim chuẩn như 'sub' cho chủ thể, 'exp' cho thời hạn, 'iat' cho thời điểm phát hành, cùng với bất kỳ claim tùy chỉnh nào mà ứng dụng của bạn định nghĩa); chữ ký là bằng chứng rằng header và payload đã được ký bởi một người nắm giữ bí mật. Bộ giải mã này tiết lộ hai phần đầu tiên, vốn là thông tin công khai; chữ ký chỉ có thể được xác minh bằng khóa, đó là lý do mọi bộ giải mã JWT đều hiển thị các claim mà không xác minh.

Các trường hợp sử dụng phổ biến

  • Gỡ lỗi vấn đề xác thực bằng cách giải mã JWT mà client của bạn đang gửi — thấy chính xác những claim nào hiện diện, ai phát hành và khi nào hết hạn.

  • Kiểm tra JWT của API gateway (AWS Cognito, Auth0, Okta) để hiểu cấu trúc claim cho các dịch vụ phía sau.

  • Xác minh rằng các claim tùy chỉnh (ID tổ chức, vai trò, feature flag) được thiết lập đúng trong mã phát hành token.

  • So sánh token trước và sau khi làm mới để xác nhận thời hạn đã được gia hạn.

  • Kiểm toán thuật toán của token — xác nhận RS256 hoặc ES256 được dùng ở môi trường sản xuất, không bao giờ là 'none'.

  • Chuyển payload base64url từ nhật ký máy chủ thành các claim mà con người đọc được.

Câu hỏi thường gặp

Dùng nó với các JWT của môi trường production có an toàn không?
Có. Việc giải mã diễn ra hoàn toàn trong trình duyệt của bạn bằng JavaScript cục bộ: token không bao giờ đến máy chủ của chúng tôi cũng như không xuất hiện trong bất kỳ nhật ký nào. Bạn có thể kiểm chứng điều này bằng cách mở DevTools → tab Network trong khi giải mã: không có yêu cầu đi ra nào được kích hoạt. Tuy vậy, hãy coi các JWT như thông tin xác thực: đừng dán chúng vào URL, ảnh chụp màn hình hay tài liệu được chia sẻ, bất kể bộ giải mã chạy ở đâu.
Công cụ này có xác minh chữ ký không?
Không. Việc xác minh chữ ký đòi hỏi bí mật (đối với HS256) hoặc khóa công khai (đối với RS256/ES256/PS256). Các công cụ web yêu cầu bạn cung cấp bí mật để xác minh một JWT là một dấu hiệu cảnh báo về bảo mật: bạn sẽ đang gửi khóa ký của mình cho một người lạ. Hãy xác minh chữ ký trên máy chủ hoặc bằng một thư viện mà bạn kiểm soát (jose, jsonwebtoken).
Điều gì xảy ra nếu JWT của tôi đã hết hạn?
Việc hết hạn không ngăn cản việc giải mã: claim 'exp' chỉ là một mẩu dữ liệu bên trong payload. Hãy tìm 'exp' trong payload đã giải mã: đó là một dấu thời gian Unix (số giây kể từ năm 1970). Hãy chuyển đổi nó bằng Bộ chuyển đổi Dấu thời gian của chúng tôi để xem thời hạn theo múi giờ của bạn. Nếu 'exp' đã qua, token sẽ bị từ chối bởi mọi trình xác minh tuân thủ, ngay cả khi bộ giải mã vẫn đọc được nó.
JWT có thể được mã hóa không?
Có: điều đó được gọi là JWE (JSON Web Encryption, RFC 7516). Công cụ này xử lý JWS (JSON Web Signature, trường hợp phổ biến), trong đó payload được ký nhưng vẫn hiển thị được. Các token JWE có 5 phần được phân tách bằng dấu chấm thay vì 3 và yêu cầu khóa riêng của người nhận để giải mã. Nếu token của bạn có 5 phần, bạn cần một công cụ tương thích với JWE.
'alg': 'none' nghĩa là gì và có nguy hiểm không?
'none' nghĩa là không có chữ ký: token chưa được ký và bất kỳ ai cũng có thể giả mạo bất kỳ claim nào. Các hệ thống production phải từ chối rõ ràng các token có 'alg: none'. Một số thư viện chấp nhận chúng theo mặc định (một loại CVE rất nổi tiếng). Hãy luôn chỉ cho phép những thuật toán mà ứng dụng của bạn mong đợi.
Tại sao nên dùng JWT thay vì cookie phiên?
JWT không lưu trạng thái: máy chủ không cần truy vấn một phiên; bản thân token chứa danh tính và quyền hạn của người dùng. Điều này khiến JWT trở nên lý tưởng cho các hệ thống phân tán và API. Cookie phiên lưu trạng thái (yêu cầu lưu trữ phiên trên máy chủ) nhưng dễ vô hiệu hóa hơn (chỉ cần xóa phiên). Sự đánh đổi: JWT mở rộng tốt hơn, nhưng bạn không thể 'đăng xuất một người dùng' cho đến khi token hết hạn.
Các claim chuẩn của một JWT là gì?
RFC 7519 định nghĩa: iss (bên phát hành), sub (chủ thể, thường là ID người dùng), aud (đối tượng), exp (thời điểm hết hạn), nbf (không trước thời điểm), iat (thời điểm phát hành), jti (ID của JWT). Ngoài những claim đó, các ứng dụng thêm các claim tùy chỉnh như 'roles', 'permissions' hoặc 'tenant_id'. Hãy giữ các claim tùy chỉnh nhỏ gọn: JWT đi kèm trong header của mỗi yêu cầu và làm tăng mức tiêu thụ băng thông của bạn.

Công cụ liên quan