Công cụ dành cho nhà phát triển · Bộ giải mã JWT
RFC 8725 Giải thích: JWT Các phương pháp thực hành tốt nhất hiện nay dành cho Người xác minh
· Lý lịch
jwt bảo vệ xác thực
IETF đã thu thập những cạm bẫy JWT đã biết vào một tài liệu có phương pháp thực hành tốt nhất hiện nay. Bài đăng này trình bày các khuyến nghị của nó và kết nối từng khuyến nghị với loại sự cố mà nó ngăn chặn.
Các lỗi JWT định kỳ sẽ thúc đẩy danh sách kiểm tra của người xác minh; nguồn kho lưu trữ không thiết lập lịch sử xuất bản
Các định dạng mã thông báo linh hoạt cho phép kết hợp mà người xác minh phải hạn chế. Các lỗi lặp đi lặp lại bao gồm các nhãn thuật toán tin cậy, chấp nhận mã thông báo dưới nhà phát hành hoặc đối tượng sai và làm theo tài liệu chính do kẻ tấn công chọn. Danh sách kiểm tra chuyển đổi những rủi ro rộng rãi đó thành các thử nghiệm loại bỏ ở ranh giới chấp nhận thực tế.
Bản phác thảo quy thuộc tính lịch sử xuất bản cho một năm cụ thể, nhưng các nguồn kho lưu trữ không xác minh lịch sử đó, vì vậy phần này bỏ qua nó. Sự khác biệt có thể thực hiện được thiết lập cục bộ: ToolAcre chỉ giải mã, trong khi mọi quyết định theo phương pháp tốt nhất đều thuộc về trình xác minh được định cấu hình.
Ghim các thuật toán và không từ chối - các đề xuất giải quyết vấn đề alg:none và sự nhầm lẫn về khóa
Ghim các thuật toán được phép độc lập với tiêu đề và từ chối đầu vào không dấu trong các luồng yêu cầu chữ ký. Liên kết từng họ thuật toán được chấp nhận với loại khóa chính xác. Không để mã thông báo chuyển trình xác minh từ kiểm tra bất đối xứng sang HMAC hoặc vô hiệu hóa kiểm tra bằng `none`.
ToolAcre gắn cờ `none` và giải thích các nhãn được nhận dạng nhưng những cảnh báo đó không có tác dụng gì. Chứng minh chính sách thực sự bằng các thử nghiệm tiêu cực đối với phần phụ trợ: các thuật toán không mong muốn, chữ ký trống và loại khóa sai phải thất bại ngay cả khi hai phân đoạn đầu tiên của chúng vẫn có thể giải mã được.
Xác thực đối tượng và nhà phát hành - các đề xuất chống lại việc phát lại nhiều dịch vụ
Xác thực nhà phát hành theo cấu hình khóa đáng tin cậy, sau đó so sánh đối tượng dự định với dịch vụ tiêu dùng. Chữ ký hợp lệ không có kiểm tra xác nhận quyền sở hữu theo ngữ cảnh vẫn có thể ủy quyền mã thông báo ở sai vị trí. Bản thân chuỗi phát hành được sao chép không phải là ràng buộc khóa.
Bộ giải mã hiển thị các giá trị `iss` và `aud` mà không biết cấu hình dự kiến. Sử dụng khả năng hiển thị đó để xác định các trường hợp thử nghiệm chứ không phải để đưa ra phán quyết. Kiểm tra chấp nhận nên phân biệt sai tổ chức phát hành, sai đối tượng và lỗi chữ ký để nhật ký hoạt động vẫn hữu ích.
Sử dụng kiểu gõ rõ ràng - tiêu đề kiểu để bảo vệ chống lại việc thay thế mã thông báo
Việc nhập mã thông báo rõ ràng có thể tách các cấu hình sử dụng lại các hình dạng xác nhận quyền sở hữu tương tự. Trình xác minh phải biết loại nó mong đợi cho một điểm cuối cụ thể và từ chối các cấu hình không tương thích thay vì coi mọi JWT đã ký là có thể hoán đổi cho nhau.
Tiêu đề `typ` vẫn không đáng tin cậy cho đến khi xác minh và ToolAcre chỉ cảnh báo khi chuỗi của nó khác với `JWT`. Nó không xác thực hồ sơ mã thông báo truy cập, nội dung lồng nhau hoặc quy ước của nhà cung cấp. Xác định quy tắc loại trong ứng dụng và thử nghiệm thay thế.
Không tin tưởng các khóa jku, x5u hoặc nhúng — các đề xuất về nguồn khóa
Đừng để mảng chứng chỉ hoặc dữ liệu `jku`, `x5u`, JWK được nhúng thiết lập nguồn khóa chỉ vì chúng xuất hiện trong tiêu đề được bảo vệ. Giải quyết các khóa thông qua mối quan hệ nhà phát hành đáng tin cậy độc lập và chính sách truy xuất có ràng buộc. Chỉ coi `kid` là bộ chọn trong ranh giới đó.
ToolAcre không thực hiện tra cứu mạng từ các giá trị tiêu đề. Đó là hành vi đúng đắn của một thanh tra viên nói chung. Trong quá trình kiểm tra, hãy theo dõi mọi đường dẫn từ siêu dữ liệu tiêu đề đến hệ thống tệp, bộ đệm, cơ sở dữ liệu và mạng, sau đó từ chối mọi đường dẫn tạo niềm tin từ đầu vào được kiểm soát bằng mã thông báo.
Đầu vào mật mã và hướng dẫn nội dung mã hóa phải được kiểm tra trong thư viện và hồ sơ đã chọn
Việc triển khai mật mã phải xác thực đầu vào và tuân theo các quy tắc của hồ sơ đã chọn. Thiết kế mã hóa cũng cần quan tâm đến việc nén và dữ liệu có thể quan sát được. Các API và mặc định chính xác là dành riêng cho thư viện và không có trong kho lưu trữ này, vì vậy bài viết này không phát minh ra các công tắc hoặc yêu cầu hỗ trợ chung.
Đọc tài liệu hiện tại về thư viện và phiên bản đã triển khai, sau đó xây dựng các bài kiểm tra đầu vào không đúng định dạng và chính sách không khớp. Các lỗi INVALID_JWT sạch của bộ giải mã thể hiện tính công thái học khi kiểm tra tốt, nhưng chúng không phải là bằng chứng cho thấy một trình xác minh riêng biệt xử lý chính xác các trường hợp cạnh mật mã.
Ví dụ đã hoạt động - kiểm tra quy trình xác minh dựa trên danh sách kiểm tra
Kiểm tra quy trình xác minh bằng cách liệt kê cấu hình nhà phát hành đáng tin cậy, thuật toán được chấp nhận, nguồn chính, đối tượng, loại mã thông báo, chính sách thời gian và xác nhận quyền sở hữu ứng dụng. Đối với mỗi mục, hãy thêm mã thông báo phủ định có thể đọc được về mặt cú pháp nhưng vi phạm chính xác một kỳ vọng. Xác nhận từ chối ở ranh giới thực.
Chỉ sử dụng ToolAcre để kiểm tra nội dung mà từng thiết bị cố định yêu cầu và đảm bảo hiện diện đột biến dự định. Không sử dụng đầu ra của nó để khẳng định rằng vật cố định không hợp lệ. Phản hồi và nhật ký của người xác minh cung cấp bằng chứng đó, trong khi bộ giải mã không đổi trên các mẫu được chấp nhận và bị từ chối.
Bài học rút ra: danh sách kiểm tra, không phải thư viện — bộ giải mã ToolAcre JWT giúp bạn kiểm tra mã thông báo trong quá trình kiểm tra; các thông lệ áp dụng cho trình xác minh bạn viết
Tài liệu có cách thực hành tốt nhất là danh sách kiểm tra chứ không phải thư viện xác minh. Giá trị của nó xuất hiện khi các nhóm chuyển các đề xuất thành cấu hình rõ ràng, thu hẹp mối quan hệ tin cậy và các thử nghiệm không thành công. Bộ giải mã có thể làm cho đầu vào mã thông báo trở nên rõ ràng trong quá trình làm việc đó nhưng không thể triển khai các điều khiển.
Duy trì ranh giới trong tài liệu và giao diện người dùng: được giải mã có nghĩa là có thể đọc được, không xác thực, chưa sửa đổi, được ủy quyền hoặc chấp nhận được. Ghim chính sách bên ngoài mã thông báo, xác minh trước và áp dụng xác nhận quyền sở hữu sau. ToolAcre cố tình dừng lại trước tất cả những quyết định đó.