Tiếng Việt

Công cụ dành cho nhà phát triển · Bộ giải mã JWT

Giải phẫu của JWT: Tách trên dấu chấm và giải mã Base64url

· Cách thức hoạt động

jwt mã hóa bảo vệ

Ba phân đoạn JWT được gắn nhãn tiêu đề, tải trọng và chữ ký
Hình minh họa vector ToolAcre gốc

JWT là ba phân đoạn base64url được phân tách bằng dấu chấm. Bài đăng này giải mã từng phần bằng tay, giải thích lý do tại sao đoạn chữ ký không phải là văn bản và cho biết những gì bộ giải mã có thể và không thể cho bạn biết.

Chuỗi dài trong tiêu đề Ủy quyền - nội dung bạn đang xem và tại sao nó có chính xác hai dấu chấm

Mã thông báo mang thường xuất hiện trong tiêu đề Ủy quyền dưới dạng một chuỗi nhỏ gọn, được phân tách bằng dấu chấm. JWT được ký điển hình ở dạng JWS thu gọn có ba phân đoạn và do đó có hai dấu chấm ngăn cách. Mã thông báo hoạt động là thông tin xác thực: không dán mã thông báo sản xuất vào bản trình diễn.

Tuần tự hóa nhỏ gọn - tiêu đề, tải trọng và chữ ký dưới dạng ba phân đoạn base64url

Trong tuần tự hóa JWS nhỏ gọn, phân đoạn đầu tiên là tiêu đề được bảo vệ, phân đoạn thứ hai là tải trọng và phân đoạn thứ ba là chữ ký hoặc MAC. Chữ ký bao gồm hai phân đoạn đầu tiên được mã hóa, nối với nhau bằng dấu chấm. Tách chuỗi định vị các phân đoạn; nó không thể thiết lập được sự tin cậy.

Base64url không có phần đệm — bảng chữ cái JWS sử dụng và lý do các đoạn không có dấu bằng ở cuối

Base64url sử dụng - và _ thay cho + và / trong Base64 thông thường. Rút gọn JWS bỏ qua dấu sau = phần đệm; bộ giải mã có thể khôi phục phần đệm trước khi giải mã. Giải mã tạo ra byte. Đối với tiêu đề và xác nhận quyền sở hữu JSON, hãy giải mã byte dưới dạng UTF-8 trước khi phân tích cú pháp văn bản.

Tiêu đề — một đối tượng JSON nhỏ đặt tên cho thuật toán và thường là khóa

Tiêu đề thường là JSON chứa alg và đôi khi là mã định danh chính, nhóc. Đây là những xác nhận được thực hiện bởi chính mã thông báo. Người xác minh phải thực thi chính sách thuật toán được phép của riêng mình và lấy khóa thích hợp một cách an toàn; đọc alg một mình không được phép.

Tải trọng — đối tượng JSON của xác nhận quyền sở hữu, có thể đọc được bởi bất kỳ ai nắm giữ mã thông báo

Tải trọng chứa các xác nhận quyền sở hữu như sub, exp và aud. Bất kỳ ai nắm giữ mã thông báo đều có thể đọc chúng; mã hóa không phải là mã hóa. Một số exp NumericDate tính số giây kể từ kỷ nguyên Unix, nhưng một xác nhận quyền sở hữu chưa được xác minh không có thẩm quyền. Không lưu trữ bí mật trong tải trọng có thể đọc được.

Chữ ký - byte thô trên hai phân đoạn đầu tiên, vô nghĩa dưới dạng văn bản và vô dụng nếu không có khóa

Phân đoạn cuối cùng là các byte chữ ký được mã hóa trong base64url, không phải đối tượng JSON thứ ba. Việc xác thực nó đòi hỏi một thuật toán mật mã, khóa và chính sách ứng dụng. ToolAcre cố tình không thực hiện xác minh: nó báo cáo sự hiện diện của chữ ký và luôn đánh dấu chữ ký được xác minh là sai.

Ví dụ đã hoạt động — giải mã phân đoạn mã thông báo mẫu theo phân đoạn, bao gồm JSON xuất hiện

Lấy tiêu đề minh họa không nhạy cảm {"alg:"HS256","typ":JWT"} và tải trọng {"sub"demo"}. Mã hóa base64url của họ là eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 và eyJzdWIiOiJkZW1vIn0. Giải mã sẽ khôi phục JSON. Việc thêm phân đoạn thứ ba tùy ý không làm cho mã thông báo xác thực.

Bài học rút ra: giải mã là đọc chứ không phải tin cậy — bộ giải mã ToolAcre JWT hiển thị tiêu đề và tải trọng và không bao giờ xác minh chữ ký, vì vậy không có gì nó hiển thị chứng minh mã thông báo là chính hãng

Giải mã là đọc chứ không phải tin tưởng. Sử dụng bộ giải mã ToolAcre JWT cho tiêu đề, xác nhận quyền sở hữu và cảnh báo của mã thông báo dùng một lần; sử dụng trình xác minh đáng tin cậy của ứng dụng của bạn để quyết định xem mã thông báo đã ký có hợp lệ hay không. Riêng các xác nhận quyền sở hữu được hiển thị không bao giờ được cấp quyền truy cập.