Bỏ qua đến nội dung chính
FreeOnlineTools Go
Tiếng Việt
Làm cách nào để

Cách Giải mã JWT và Kiểm tra Claims An toàn

Bởi FreeOnlineTools Team · Đã cập nhật 2026-08-28

Trả lời nhanh

JWT là ba chuỗi Base64URL nối bởi dấu chấm: header.payload.signature. Giải mã header và payload bằng Base64URL decoding để inspect claim —nhưng giải mã chỉ đọc dữ liệu, không xác thực tính xác thực. Luôn xác minh signature trên server. Dùng JWT Decoder để inspect token.

Giới thiệu

JSON Web Token (JWT, RFC 7519) là định dạng token compact, URL-safe dùng cho authentication và authorization. Có ba phần mã hóa Base64URL phân tách bởi dấu chấm: header.payload.signature. Header mô tả thuật toán, payload mang claim (user id, roles, expiry) và signature chứng minh token được cấp bởi bên đáng tin. Quan trọng: header và payload được mã hóa, không mã hóa —bất kỳ ai cũng có thể đọc.

Từng bước một

  1. Chia mã thông báo thành ba phần

    JWT trông giống như xxxxx.yyyyy.zzzzz. Tách ký tự dấu chấm để lấy tiêu đề (phần 0), tải trọng (phần 1) và chữ ký (phần 2). Nếu không có chính xác ba phần thì mã thông báo không đúng định dạng.

  2. Base64URL-giải mã tiêu đề

    Tiêu đề là một đối tượng JSON được mã hóa Base64URL như {"alg:"HS256","typ":JWT"}. Base64URL sử dụng - và _ thay vì + và / và bỏ qua phần đệm. Giải mã nó, sau đó JSON.parse để đọc thuật toán và gõ. Bộ giải mã JWT của chúng tôi thực hiện việc này một cách tự động.

  3. Base64URL-giải mã tải trọng (xác nhận quyền sở hữu)

    Tải trọng là đối tượng JSON của khiếu nại. Các xác nhận quyền sở hữu đã đăng ký bao gồm iss (nhà phát hành), sub (chủ đề), aud (đối tượng), exp (hết hạn), nbf (không trước đó), iat (phát hành tại) và jti (mã thông báo id). Các xác nhận quyền sở hữu riêng tư dành riêng cho từng ứng dụng (ví dụ: vai trò, email). Giải mã và kiểm tra, nhưng không tin tưởng cho đến khi được xác minh.

  4. Kiểm tra các yêu cầu hết hạn và không có trước

    exp và nbf là dấu thời gian Unix (giây). Nếu thời gian hiện tại đã qua, mã thông báo đã hết hạn và phải bị từ chối. Nếu thời gian hiện tại trước nbf thì mã thông báo chưa hợp lệ. Kiểm tra UX phía máy khách này nhưng thực thi chúng ở phía máy chủ để bảo mật.

  5. Xác minh chữ ký trên máy chủ (không bao giờ phía máy khách)

    Chữ ký là HMAC-SHA256(bí mật, header.payload) cho HS256 hoặc chữ ký RSA/ECDSA cho RS256/ES256. Việc xác minh yêu cầu khóa bí mật hoặc khóa chung không bao giờ được truy cập vào trình duyệt. Sử dụng thư viện như jsonwebtoken (Node) hoặc jose để xác minh —không bao giờ viết mật mã của riêng bạn.

Ví dụ

Một JWT điển hình (ba phần)

đầu vào: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpmeJf36POk6yJV_adQssw5c

đầu ra: Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}

Tải trọng được giải mã với các xác nhận quyền sở hữu tiêu chuẩn

đầu vào: Tải trọng của mã thông báo xác thực thực

đầu ra: {"sub":"user-42","iss":"freeonlinetoolsgo.com","exp":1767229200,"iat":1767225600,"role":"admin"}

Phát hiện mã thông báo đã hết hạn

đầu vào: điểm kinh nghiệm: 1609459200 (2021-01-01) đã kiểm tra vào ngày 28-08-2026

đầu ra: Token is expired —current time (1767225600) > exp (1609459200). Reject and prompt re-login.

Các vấn đề thường gặp

  • Coi việc giải mã là xác minh: bất kỳ ai cũng có thể tạo JWT với bất kỳ xác nhận quyền sở hữu nào và chữ ký giả. Giải mã đọc tải trọng nhưng không chứng minh được gì. Luôn xác minh chữ ký bằng khóa bí mật/chung trên máy chủ trước khi tin cậy các xác nhận quyền sở hữu.
  • Sử dụng thuật toán 'none': thông số JWT cho phép alg: none đối với các mã thông báo không bảo mật. Nếu trình xác minh của bạn chấp nhận alg: none thì kẻ tấn công có thể giả mạo mã thông báo. Định cấu hình thư viện của bạn để từ chối không có thuật toán nào và đưa vào danh sách trắng các thuật toán dự kiến.
  • Lưu trữ JWT trong localStorage: XSS có thể đọc localStorage và lọc mã thông báo. Ưu tiên httpOnly, Secure, SameSite=Strict cookie cho mã thông báo phiên hoặc mã thông báo trong bộ nhớ tồn tại trong thời gian ngắn với cookie mã thông báo làm mới.
  • Không kiểm tra exp/aud/iss: mã thông báo bị đánh cắp có giá trị cho đến khi hết hạn. Luôn kiểm tra exp (hết hạn), aud (đối tượng dự kiến) và iss (nhà phát hành) trên mọi yêu cầu để ngăn chặn việc phát lại mã thông báo trên các dịch vụ.

Mẹo

  • Sử dụng mã thông báo truy cập có thời gian sử dụng ngắn (15 phút) cộng với mã thông báo làm mới có thời gian sử dụng lâu dài —điều này sẽ giới hạn thời lượng nếu mã thông báo truy cập bị đánh cắp.
  • Ưu tiên RS256 (không đối xứng) hơn HS256 (đối xứng) khi nhiều dịch vụ xác minh mã thông báo: mỗi dịch vụ nhận khóa chung và chỉ nhà phát hành mới có khóa riêng.
  • Sử dụng Bộ giải mã JWT của chúng tôi trong quá trình phát triển để kiểm tra những gì máy chủ đang phát hành —nó hiển thị tiêu đề, tải trọng đã được giải mã và bản tóm tắt xác nhận quyền sở hữu mà con người có thể đọc được mà không cần gửi mã thông báo đi bất cứ đâu.
  • Không bao giờ đặt dữ liệu nhạy cảm (mật khẩu, PII) vào tải trọng JWT —nó được mã hóa Base64, không được mã hóa và bất kỳ ai chặn mã thông báo đều có thể đọc mọi xác nhận quyền sở hữu.

Công cụ liên quan

Hướng dẫn liên quan

Tài liệu tham khảo