Công cụ dành cho nhà phát triển · Bộ giải mã JWT
Cách giải mã tải trọng JWT bằng tay với base64 và jq
· Cách thức hoạt động
jwt command-line developer-workflow
Trên hộp không đầu, bạn vẫn có thể đọc mã thông báo có cut, tr, base64 và jq. Bài đăng này cung cấp các lệnh, giải thích chuyển đổi base64url mà mỗi lệnh thực hiện và liệt kê các cạm bẫy.
Đọc mã thông báo qua SSH — khi trình duyệt không phải là một tùy chọn
Máy chủ không đầu có thể để lại cho bạn một chuỗi hình mã thông báo và không có giao diện người dùng trình duyệt. Công việc kiểm tra cần thiết vẫn còn nhỏ: cô lập một phân đoạn, dịch chính tả base64url, khôi phục phần đệm, giải mã byte và phân tích cú pháp JSON. Mối nguy hiểm nằm ở hoạt động chứ không phải tính toán vì lịch sử shell có thể lưu giữ thông tin xác thực trực tiếp.
Sử dụng mã thông báo đã hết hạn hoặc tổng hợp bất cứ khi nào có thể. Nếu ứng phó sự cố yêu cầu kiểm tra một giá trị thực, hãy tuân theo các biện pháp kiểm soát xử lý thông tin xác thực của tổ chức bạn, ngăn nó truy cập vào lịch sử hoặc nhật ký được chia sẻ và xoay nó sau khi tiếp xúc. Giải mã dòng lệnh chỉ kiểm tra; nó không cung cấp khóa xác minh hoặc chính sách tin cậy.
Tách theo dấu chấm - cắt hoặc awk để tách biệt phân đoạn tải trọng
JWS có hình JWT thu gọn có ba trường được phân tách bằng dấu chấm. Tải trọng là thứ hai. Shell có thể phân tách nó bằng công cụ nhận biết dấu phân cách, nhưng trích dẫn các biến để shell không mở rộng ký tự hoặc phân chia khoảng trắng. Xóa nhãn `Bearer ` ở đầu trước khi chọn các trường vì tiền tố đó thuộc cú pháp HTTP.
Đếm các trường thay vì mù quáng lấy trường hai. ToolAcre từ chối bất kỳ nội dung nào ngoài ba phần và xác định riêng biệt đầu vào được mã hóa gồm năm phần. Đường ống vỏ phải áp dụng biện pháp thận trọng tương tự về cấu trúc; việc nhận một phân đoạn từ đầu vào không đúng định dạng có thể tạo ra JSON hợp lý trong khi che giấu rằng mã thông báo ban đầu đã bị cắt bớt.
Chuyển đổi bảng chữ cái - tr để chuyển dấu gạch nối và dấu gạch dưới thành dấu cộng và dấu gạch chéo
Việc triển khai Base64 dòng lệnh tiêu chuẩn thường yêu cầu dấu cộng và dấu gạch chéo trong đó phân đoạn JWT có thể chứa dấu gạch nối và dấu gạch dưới. Dịch `-` sang `+` và `_` sang `/` ánh xạ các ký hiệu an toàn URL trở lại vị trí tiêu chuẩn của chúng mà không thay đổi giá trị sáu bit được biểu thị.
Sử dụng lệnh dịch mà phân tích cú pháp tùy chọn không thể nhầm dấu gạch nối ở đầu với cờ và giữ dữ liệu ở biến được trích dẫn hoặc đầu vào tiêu chuẩn. Việc chuyển đổi bảng chữ cái là công việc mã hóa có thể đảo ngược. Nó không giải mã các xác nhận quyền sở hữu và thành công không chứng minh rằng mã thông báo đến từ nhà phát hành có tên.
Khôi phục phần đệm - phép tính cộng đúng số dấu bằng
Sau khi dịch, tính độ dài theo modulo 4. Số dư 0 không cần dấu bằng, số dư hai cần hai và số dư ba cần một. Phần còn lại biểu thị việc cắt ngắn và nên dừng đường ống. Việc thêm phần đệm tùy ý cho đến khi tiện ích ngừng phàn nàn có thể che giấu thiệt hại hơn là chẩn đoán nó.
ToolAcre sử dụng chính xác quy tắc độ dài này trong `base64ToBytes` và từ chối phần còn lại không thể thực hiện được. Các tiện ích Shell khác nhau ở chỗ chúng có chấp nhận phần đệm bị bỏ qua hay không, do đó, việc chuẩn hóa đầu vào trước tiên làm cho đường ống trở nên rõ ràng và có tính di động về mặt khái niệm, mặc dù các cờ lệnh vẫn có thể khác nhau giữa các hệ điều hành.
Giải mã và in ấn đẹp mắt — base64 -d được dẫn vào jq
Chuyển giá trị được đệm tới bộ giải mã Base64 của nền tảng rồi đến `jq`. Lệnh đầu tiên phục hồi byte; thứ hai yêu cầu các byte đó để tạo thành JSON. Lệnh Base64 thành công theo sau là lỗi phân tích cú pháp jq có nghĩa là mã hóa có thể giải mã được về mặt cấu trúc nhưng nội dung của nó không phải là tải trọng JSON.
Sự khác biệt đó phản ánh đường dẫn lỗi của ToolAcre. Đầu tiên, nó báo cáo base64url hoặc UTF-8 không hợp lệ, sau đó báo cáo riêng JSON không hợp lệ, sau đó từ chối null, mảng và kiểu gốc vì tiêu đề hoặc tải trọng JWT phải là đối tượng cho công cụ này. Việc tách biệt các giai đoạn sẽ giúp xử lý thất bại.
Ví dụ đã hoạt động — quy trình đầy đủ trên mã thông báo mẫu, với đầu ra ở mỗi giai đoạn
Đối với một ví dụ tổng hợp, phân đoạn tải trọng `eyJzdWIiOiJkZW1vIiwicm9sZSI6InJlYWRlciJ9` không cần dịch hoặc đệm bảng chữ cái. Việc giải mã mang lại các định dạng `{"sub":"demo","role":"reader"}` và jq phản đối trên các dòng. Vai trò hiển thị chỉ là một chuỗi được cung cấp bởi mã thông báo.
Bây giờ hãy thay đổi JSON, mã hóa lại và đính kèm bất kỳ phân đoạn thứ ba nào. Đường ống vẫn in đối tượng đã thay đổi. Điều này chứng tỏ tại sao lệnh giải mã không thể đóng vai trò kiểm tra tính hợp lệ: cả xác nhận quyền sở hữu hợp pháp và bịa đặt đều trải qua các chuyển đổi công khai giống nhau trừ khi một người xác minh riêng biệt kiểm tra chữ ký.
Cạm bẫy - lịch sử shell thu thập mã thông báo, triển khai base64 từ chối phần đệm bị thiếu và mã thông báo có 'Người mang ' ở đầu
Các lỗi thường gặp bao gồm giữ lại tiền tố HTTP, chọn sai trường được phân tách bằng dấu chấm, mất các ký tự ở cuối trong quá trình sao chép và sử dụng triển khai Base64 yêu cầu khoảng đệm. Một cạm bẫy khác là đặt toàn bộ mã thông báo trực tiếp trên dòng lệnh, nơi danh sách hoặc lịch sử quy trình có thể giữ lại nó.
Ưu tiên các biến đầu vào tiêu chuẩn và tạm thời dưới các biện pháp kiểm soát thích hợp và không bao giờ dán mã thông báo sản xuất vào cuộc trò chuyện, vé hoặc thiết bị đầu cuối dùng chung để thuận tiện. Ngoài ra, hãy nhớ rằng phân đoạn thứ ba là tài liệu chữ ký nhị phân chứ không phải JSON, vì vậy việc gửi nó qua jq sẽ không thành công và không cho bạn biết gì về tính hợp lệ của chữ ký.
Bài học rút ra: cùng một cách giải mã, trong mọi môi trường — khi bạn có trình duyệt, bộ giải mã ToolAcre JWT sẽ thực hiện việc này cục bộ mà không tải lên gì cả
Quy trình shell và ToolAcre thực hiện cùng một trình tự chỉ giải mã trong các môi trường khác nhau: phân tách, chuẩn hóa, đệm, giải mã UTF-8 và phân tích cú pháp JSON. Sử dụng bất kỳ môi trường nào bạn có thể kiểm tra và kiểm soát, với dữ liệu không nhạy cảm làm mặc định.
Không có đường dẫn nào xác minh tính xác thực hoặc ủy quyền cho người gọi. Sau khi đọc hình dạng tải trọng, hãy chuyển đến trình xác minh đáng tin cậy của dịch vụ và ghi nhật ký để đưa ra các quyết định về chính sách và mật mã. Lệnh tạo ra JSON đẹp đã hoàn thành nhiệm vụ định dạng chứ không phải đánh giá bảo mật.