Công cụ dành cho nhà phát triển · Bộ giải mã JWT
Kiểm tra đối tượng và nhà phát hành: Ngăn chặn JWT được phát lại ở nơi khác
· Tại sao nó quan trọng
jwt xác thực bảo vệ
Mã thông báo được phát hành cho một dịch vụ có thể được trao cho dịch vụ khác có cùng nhà phát hành. Bài đăng này giải thích cách kiểm tra aud và iss ngăn chặn việc đó cũng như cách đọc cả hai xác nhận quyền sở hữu trong mã thông báo.
Dịch vụ B chấp nhận mã thông báo dành cho dịch vụ A - phát lại dịch vụ chéo mà chữ ký hợp lệ không ngăn cản
Chữ ký có thể hợp lệ đối với mã thông báo được cấp cho một dịch vụ khác. Nếu một số API tin tưởng vào cùng một nền tảng nhận dạng nhưng bỏ qua ngữ cảnh của người nhận thì thông tin xác thực dành cho dịch vụ A có thể được phát lại ở dịch vụ B. Chỉ riêng tính toàn vẹn của mật mã không trả lời được ai nên sử dụng nó.
ToolAcre có thể tiết lộ `iss` và `aud` để nhà phát triển có thể phát hiện ra sự không khớp rõ ràng. Các chuỗi đó vẫn chưa được xác minh cho đến khi chữ ký thành công và công cụ trình duyệt không bao giờ thực hiện việc kiểm tra đó. Máy chủ tài nguyên thực tế phải thực thi cả mối quan hệ nhà phát hành và đối tượng dự kiến.
iss - ràng buộc mã thông báo với nhà phát hành mà dịch vụ của bạn tin tưởng và tại sao kết hợp chuỗi là không đủ nếu không có ràng buộc khóa
`iss` xác định thực thể yêu cầu tải trọng đã phát hành mã thông báo. Trình xác minh cần một tổ chức phát hành dự kiến chính xác theo cấu hình của chính nó và phải liên kết danh tính đó với mối quan hệ khám phá khóa chính xác. Việc so sánh văn bản mà không có ràng buộc mật mã sẽ tạo cơ hội cho kẻ tấn công sao chép chuỗi dự kiến.
Bộ giải mã mô tả `iss` là “người đã tạo mã thông báo”, nhưng đó là ý nghĩa đã được đăng ký chứ không phải là phát hiện về giá trị được dán. Văn bản phát hành có thể đọc được là bằng chứng hữu ích cho việc cấu hình gỡ lỗi. Nó không thể chọn một nguồn khóa tùy ý hoặc tự xác thực.
aud - một chuỗi hoặc một mảng đặt tên cho người nhận dự định và quy tắc mà người xác minh phải tìm thấy trong đó
`aud` đặt tên cho người nhận dự định và có thể xuất hiện dưới dạng một chuỗi hoặc một bộ sưu tập. Chính sách của máy chủ tài nguyên phải tìm thấy chính nó trong giá trị được xác thực bằng cách sử dụng các quy tắc so sánh chính xác mà hồ sơ của nó yêu cầu. Nó không nên chấp nhận mã thông báo chỉ vì một số dịch vụ quen thuộc khác được liệt kê.
ToolAcre mang các mảng dưới dạng văn bản JSON trong bảng xác nhận quyền sở hữu, bảo toàn cấu trúc hiển thị của chúng để kiểm tra. Nó không biết mã định danh hiện tại của API và không thể quyết định kết quả trùng khớp. Sự vắng mặt có chủ ý đó ngăn cản bộ giải mã chung phát minh ra bối cảnh ủy quyền mà nó không sở hữu.
azp và phạm vi — OpenID Connect và OAuth xác nhận rằng sẽ tinh chỉnh ai có thể sử dụng mã thông báo và để làm gì
`azp` và `scope` có thể thêm ngữ cảnh về một bên được ủy quyền và các quyền được yêu cầu trong hồ sơ xác định chúng. Chúng không thay thế việc kiểm tra đối tượng, nhà phát hành hoặc chữ ký. Tên phạm vi là một xác nhận, không phải là cấp quyền cho đến khi máy chủ tài nguyên ánh xạ một giá trị được xác thực vào chính sách của chính nó.
Bộ giải mã hiện tại coi đây là những yêu cầu dành riêng cho ứng dụng vì bảng mô tả đã đăng ký của nó bao gồm bảy tên cốt lõi. Nó hiển thị các giá trị của chúng nhưng không cung cấp ngữ nghĩa OpenID Connect hoặc OAuth. Tham khảo hồ sơ hiện hành và hợp đồng nhà cung cấp trước khi sử dụng chúng để đưa ra quyết định.
Mô hình cấp phó bối rối - cách một mã thông báo hợp pháp trở thành một cuộc tấn công khi đối tượng không được kiểm tra
Một cấp phó bối rối sử dụng quyền lực hợp pháp trong một bối cảnh ngoài ý muốn. Mã thông báo được dịch vụ sai chấp nhận có thể kích hoạt chính xác mẫu đó ngay cả khi không ai giả mạo chữ ký. Kiểm tra đối tượng giới hạn nơi có thể áp dụng các xác nhận quyền sở hữu đã được xác thực, trong khi kiểm tra nhà phát hành giới hạn xác nhận của ai mà dịch vụ xem xét.
Đây là lý do tại sao cờ “chữ ký hợp lệ” chung vẫn chưa đủ. Việc ủy quyền phụ thuộc vào người nhận và hoạt động. ToolAcre tránh hoàn toàn sự mơ hồ đó bằng cách không báo cáo kết quả xác minh nào, để dịch vụ tiêu dùng kết hợp mật mã với chính sách theo ngữ cảnh.
Ví dụ đã hoạt động - đọc iss và aud từ hai mã thông báo trong bộ giải mã ToolAcre JWT và quyết định dịch vụ nào sẽ chấp nhận từng mã thông báo
Tạo hai mã thông báo vô hại có tải trọng được giải mã chỉ khác nhau ở `aud`: một tên `service-a`, tên còn lại là `service-b`; cả hai đều yêu cầu cùng một tổ chức phát hành. ToolAcre tạo nên sự khác biệt rõ ràng. Trình xác minh dịch vụ-A không được chỉ chấp nhận từ màn hình này và phải từ chối đối tượng dịch vụ-B đã được xác thực.
Sau đó đảo ngược bài tập với hai chuỗi phát hành. Chỉ văn bản mong đợi là không đủ trừ khi xác minh sử dụng các khóa đáng tin cậy cho nhà phát hành đó. Những ví dụ này tách biệt việc kiểm tra với việc chấp nhận và cho thấy lý do tại sao việc sao chép các xác nhận quyền sở hữu có vẻ đúng đắn vào một mã thông báo bịa đặt lại không thay đổi chính sách đáng tin cậy nào.
Điều này không bao gồm - xác minh chữ ký, điều mà bộ giải mã không bao giờ thực hiện; Kiểm tra aud và iss chỉ quan trọng sau khi chữ ký được giữ
Việc kiểm tra đối tượng và nhà phát hành chỉ quan trọng sau khi xác minh bằng mật mã xác minh rằng các byte được bảo vệ tương ứng với tài liệu chính đáng tin cậy. ToolAcre không thực hiện xác minh nào cả. Kết quả đầu ra của nó không thể chứng minh rằng một khiếu nại vẫn còn nguyên vẹn hoặc một nhà phát hành đã biết là tác giả của nó.
Nó cũng không tìm nạp siêu dữ liệu, chọn khóa hoặc so sánh những người nhận đã được định cấu hình. Sử dụng các bài kiểm tra phụ trợ và nhật ký để chứng minh sự từ chối đối với nhà phát hành sai và đối tượng sai. Sự trùng khớp trực quan trong bộ giải mã là đầu mối gỡ lỗi, không bao giờ là bằng chứng ủy quyền đầy đủ.
Bài học rút ra: kiểm tra xem nó dành cho ai, không chỉ ai đã ký nó — bộ giải mã ToolAcre JWT hiển thị các xác nhận quyền sở hữu aud và iss mà bạn cần so sánh
Kiểm tra xem mã thông báo dành cho ai chứ không chỉ đơn thuần là tên được ký tên. Luồng mạnh mẽ xác thực các byte được bảo vệ theo mối quan hệ nhà phát hành đáng tin cậy độc lập, sau đó yêu cầu đối tượng có thể chấp nhận và áp dụng các quy tắc ủy quyền dành riêng cho dịch vụ.
Sử dụng ToolAcre để đọc các giá trị kiểm tra an toàn và hình thành bước kiểm tra phía máy chủ tiếp theo. Không chọn khóa xác minh từ tiêu đề hoặc dữ liệu xác nhận quyền sở hữu không đáng tin cậy và không biến `iss`, `aud`, `azp` hoặc `scope` được hiển thị thành một khoản trợ cấp mà không có toàn bộ luồng đáng tin cậy.