Công cụ giải mã JWT miễn phí

Giải mã và kiểm tra JSON Web Token · header, payload, claim và thời hạn.

Header


      

Payload


      

Signature


      

Về JWT

JSON Web Token (JWT) là một cách gọn nhẹ để biểu diễn các claim giữa hai bên. Chúng gồm ba phần: header (thuật toán và loại token), payload (các claim như issuer, thời hạn, subject) và signature. Công cụ này giải mã header và payload nhưng không xác minh chữ ký · để xác minh, bạn cần khóa bí mật hoặc khóa công khai dùng ký token. Toàn bộ việc giải mã diễn ra trong trình duyệt của bạn; token của bạn không được gửi đi đâu cả.

Lịch sử ngắn của JSON Web Token

JSON Web Token (JWT) đã được chuẩn hóa thành RFC 7519 vào tháng 5 năm 2015 bởi Michael B. Jones (Microsoft), John Bradley (Ping Identity)Nat Sakimura (NRI) dưới Nhóm Công tác JOSE của IETF. Đó là đỉnh cao của nửa thập kỷ làm việc: bản dự thảo internet JWT đầu tiên xuất hiện vào tháng 12 năm 2010, phát triển từ định dạng khẳng định dựa trên XML nặng nề của SAML 2.0 (2005) và nhu cầu cảm nhận về một cái gì đó nhẹ hơn mà các trình duyệt có thể phân tích nguyên bản. Bước đột phá là chọn JSON thay vì XML và base64url thay vì PEM: một JWT có thể vừa trong chuỗi truy vấn URL hoặc tiêu đề Authorization: Bearer. Toàn bộ gia đình JOSE được gửi như một bộ phối hợp: RFC 7515 (JWS) để ký, RFC 7516 (JWE) để mã hóa, RFC 7517 (JWK) cho định dạng khóa, RFC 7518 (JWA) cho định danh thuật toán và RFC 7519 (JWT) cho lớp khai báo, tất cả vào cùng một ngày trong tháng 5 năm 2015. Việc áp dụng là ngay lập tức. OAuth 2.0 (RFC 6749, 2012) đã chuẩn hóa các token truy cập nhưng để định dạng của chúng không rõ ràng; ngành đã chọn JWT. OpenID Connect (tháng 12 năm 2014, OpenID Foundation) đã làm cho JWT bắt buộc đối với các token ID. Đến năm 2017, mọi nhà cung cấp danh tính chính (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) đều phát hành JWT làm định dạng phiên bản gốc của họ. JWT.io, trang web giải mã mà Auth0 ra mắt vào năm 2014, đã trở thành công cụ gỡ lỗi JWT trên thực tế và giúp cố định thị phần nhận thức của các nhà phát triển đối với định dạng. Hai sự cố bảo mật đã định hình mô hình mối đe dọa hiện đại: tiết lộ năm 2015 của Tim McLean về bypass alg: none và cuộc tấn công nhầm lẫn thuật toán HS/RS, và CVE-2022-21449 (tháng 4 năm 2022), lỗi «Psychic Signatures» của Neil Madden trong trình xác minh ECDSA của Java 15-18. Cả hai đều dẫn đến việc tăng cường mặc định của thư viện: hầu hết các thư viện hiện đại bây giờ từ chối alg: none ngay lập tức và ghim thuật toán dự kiến thay vì đọc nó từ tiêu đề token.

Giải phẫu của một JWT

Nơi JWT được sử dụng trong thực tế

Các tiêu chuẩn và cột mốc bảo mật

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

Tại sao công cụ này không xác minh chữ ký?

Xác minh cần một bí mật (HMAC) hoặc khóa công khai (RSA / ECDSA / EdDSA). Việc dán bí mật HMAC sản xuất vào bất kỳ trang web nào là một rò rỉ thông tin xác thực, ngay cả trên một công cụ thề không truyền bất cứ điều gì. Xác minh thuộc về một máy chủ bạn kiểm soát. Công việc của bộ giải mã là làm cho nội dung có thể đọc được để bạn có thể thấy những gì trình xác minh của bạn nên kiểm tra.

Có an toàn để dán các token sản xuất thực ở đây không?

Giải mã xảy ra hoàn toàn trong trình duyệt của bạn. Token không được gửi qua mạng, ghi vào bất kỳ nhật ký nào, hoặc lưu trữ ở bất cứ đâu. Nói vậy, một JWT thường một thông tin xác thực: bất kỳ ai nắm giữ một token truy cập chưa hết hạn đều có thể hành động như người dùng. Quy ước cộng đồng là «đối xử với JWT sản xuất như một cookie phiên»: ưu tiên token thử nghiệm khi bạn có thể, và xoay vòng bất kỳ token thực nào bạn đã chia sẻ ở bất cứ đâu ngoài phiên trình duyệt đã đúc nó.

Tôi nên lưu trữ một JWT ở đâu trong trình duyệt?

Hai mẫu phổ biến mỗi mẫu có một sự đánh đổi. localStorage thuận tiện nhưng có thể đọc được bởi bất kỳ cuộc tấn công XSS thành công nào trên trang. Cookie với HttpOnly không nhìn thấy đối với JavaScript nên XSS không thể đọc chúng, nhưng chúng cần SameSite=Strict hoặc SameSite=Lax để tránh CSRF. Thực hành tốt nhất hiện tại: token truy cập có thời gian ngắn trong một biến JavaScript (chỉ bộ nhớ) cộng với một token làm mới có thời gian dài trong cookie HttpOnly + Secure + SameSite=Strict có phạm vi cho điểm cuối làm mới, được xoay vòng trong mỗi lần sử dụng.

Trường kid trong tiêu đề làm gì?

Nó xác định khóa nào đã ký token. Các nhà cung cấp danh tính hiện đại xuất bản khóa công khai của họ tại điểm cuối /.well-known/jwks.json dưới dạng JWK Set (RFC 7517); trình xác minh tìm kiếm khóa có kid khớp với tiêu đề của token. Đây là điều khiến cho việc xoay khóa không có thời gian chết là có thể: cả khóa cũ và mới có thể nằm trong JWKS trong giai đoạn ân hạn.

Tôi có thể thu hồi một JWT sau khi nó đã được phát hành không?

Không thể nguyên bản. Một JWT được ký có hiệu lực cho đến khai báo exp của nó; sự không trạng thái đó là thuộc tính tiêu đề của định dạng. Giải pháp thay thế: giữ token truy cập ngắn (5-15 phút) ghép với một token làm mới có thể thu hồi; duy trì danh sách từ chối phía máy chủ các giá trị jti đã thu hồi; xoay khóa ký (làm cho mọi token chưa được giải quyết được ký bằng nó không hợp lệ). Mỗi tùy chọn giới thiệu lại một số trạng thái; đó là sự đánh đổi.

Giải mã một token có giống như giải mật mã nó không?

Không. Giải mã đảo ngược base64url trở lại JSON: bất kỳ ai cũng có thể làm điều đó, và đó là điểm. Giải mật mã yêu cầu một khóa và chỉ áp dụng cho JSON Web Encryption (JWE, RFC 7516), là biến thể được mã hóa của họ JOSE. Hầu hết các token bạn thấy trong tự nhiên là JWS (đã ký nhưng chưa được mã hóa), vì vậy giải mã là đủ để đọc chúng.

Công cụ liên quan