Công cụ dành cho nhà phát triển · Bộ giải mã JWT
Giải thích về tiêu đề JWT: alg, typ, kid và các trường không tin cậy
· Cách thức hoạt động
jwt bảo vệ xác thực
Tiêu đề cho người xác minh biết mã thông báo đã được ký như thế nào và sử dụng khóa nào. Bài đăng này giải thích từng trường tiêu đề chung, nội dung mà người xác minh có thể dựa vào và trường nào không bao giờ được tin cậy từ chính mã thông báo.
Đối tượng JSON nhỏ không ai đọc — và các quyết định xác minh mà nó ảnh hưởng
Tiêu đề đủ nhỏ để có thể bỏ qua, tuy nhiên các trường của nó thường tham gia vào quá trình định tuyến xác minh. Điều đó gây nguy hiểm khi nhầm lẫn giữa khả năng hiển thị với thẩm quyền. ToolAcre giải mã tiêu đề dưới dạng đối tượng JSON và hiển thị các thuộc tính của nó, nhưng mọi byte đều đến từ chủ sở hữu mã thông báo và vẫn là đầu vào không đáng tin cậy.
Trình xác minh chỉ có thể sử dụng giá trị tiêu đề bên trong các ràng buộc được thiết lập từ cấu hình đáng tin cậy. Nó không được để mã thông báo phát minh ra thuật toán, nhà phát hành hoặc nguồn khóa từ xa được chấp nhận. Công việc của bộ giải mã kết thúc ở JSON có thể đọc được cùng với các cảnh báo; nó không bao giờ chọn khóa hoặc đưa ra quyết định cho phép hoặc từ chối.
hiển thị alg: bộ giải mã chỉ giải thích các thuật toán có tên khi triển khai nó
`alg` khai báo thuật toán mà các yêu cầu mã thông báo đã được sử dụng. ToolAcre có ghi chú giải thích cho HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384 và PS512, cùng với cảnh báo cho `none`. Bất kỳ chuỗi nào khác được hiển thị dưới dạng không được nhận dạng thay vì được coi là được hỗ trợ.
Danh sách này là một tính năng hiển thị, không phải là danh mục các thuật toán mà ToolAcre có thể xác minh: nó không xác minh thuật toán nào trong số đó. Phần phụ trợ phải ghim các lựa chọn được phép của nó một cách độc lập và từ chối các lựa chọn không khớp. Việc đọc `alg: RS256` không thể chứng minh RSA đã được sử dụng, cũng như việc đọc `alg: none` không thể ủy quyền một cách an toàn cho mã thông báo chưa được ký.
typ và cty — khai báo loại mã thông báo, cấu hình at+jwt cho mã thông báo truy cập và JWT lồng nhau
`typ` mô tả loại hoặc cấu hình phương tiện mà nhà sản xuất dự định. ToolAcre cảnh báo khi giá trị chuỗi khác với `JWT`; nó không thực thi ngữ nghĩa hồ sơ. Trường `cty` có thể mô tả nội dung lồng nhau nhưng bộ giải mã hiện tại không có đường dẫn xử lý mã thông báo lồng nhau và không diễn giải trường đó.
Việc nhập rõ ràng có thể giúp trình xác minh tách biệt các lớp mã thông báo khác nhau khi chính sách của nó xác định các giá trị mong đợi. Séc vẫn thuộc về người xác minh đó. Mã thông báo không thể tự biến mình thành mã thông báo truy cập chỉ bằng cách thông báo nhãn ưu tiên và bảng giải mã không thể xác định điểm cuối ứng dụng nào sẽ sử dụng nó.
kid — mã định danh khóa cho phép người xác minh xoay khóa mà không có thời gian chết
`kid` là mã định danh khóa, không phải tài liệu chính và không phải bằng chứng về quyền sở hữu. Một dịch vụ xoay vòng một số khóa đáng tin cậy có thể sử dụng bối cảnh nhà phát hành được xác thực và mã định danh bị ràng buộc để xác định vị trí ứng viên. Mã nhận dạng phải vẫn là đầu vào cho tra cứu được kiểm soát thay vì đường dẫn tệp, đoạn truy vấn hoặc URL tùy ý.
ToolAcre để lại `kid` hiển thị trong tiêu đề JSON nhưng không giải quyết được vấn đề đó. Vấn đề hạn chế đó là: không có kho lưu trữ khóa đáng tin cậy nào có sẵn cho trang giải mã công khai. Nếu 401 tuân theo vòng quay, hãy so sánh giá trị nhận dạng được hiển thị với nhật ký và kho khóa phía máy chủ mà không cho rằng khóa được đề xuất của mã thông báo là hợp pháp.
jku, x5u, jwk và x5c — các trường tiêu đề trỏ đến khóa và lý do người xác minh không bao giờ được tìm nạp hoặc tin tưởng chúng một cách mù quáng
Các trường như `jku` và `x5u` có thể đặt tên vị trí, trong khi `jwk` và `x5c` có thể chứa dữ liệu liên quan đến khóa. Sự hiện diện của họ không làm cho những địa điểm hoặc giá trị đó trở nên đáng tin cậy. Đang tìm nạp URL hoặc chấp nhận tài liệu được nhúng chỉ vì tiêu đề chưa được xác minh đã cung cấp cho nó quyết định bảo mật cho người yêu cầu.
Trình xác minh an toàn lấy khóa thông qua mối quan hệ với nhà phát hành và chính sách mạng được thiết lập bên ngoài mã thông báo. ToolAcre không tìm nạp URL tiêu đề cũng như không tạo dựng niềm tin từ các khóa được nhúng. Trong quá trình xem xét, việc nhìn thấy một trong các trường này là lời nhắc kiểm tra cấu hình trình xác minh chứ không phải hướng dẫn làm theo tiêu đề.
crit - phần mở rộng mà người xác minh phải hiểu hoặc từ chối
`crit` báo hiệu rằng các tiện ích mở rộng cụ thể cần được người nhận hiểu rõ. Trình xác minh hỗ trợ tiện ích mở rộng như vậy cần có đường dẫn từ chối và triển khai rõ ràng đối với các tên quan trọng không xác định. Việc bỏ qua một điểm đánh dấu quan trọng không quen thuộc có thể khiến nhà sản xuất và người tiêu dùng hiểu nội dung được bảo vệ một cách khác nhau.
Việc triển khai chỉ giải mã không xử lý `crit`, do đó, nó có thể hiển thị mảng thô mà không yêu cầu khả năng tương thích. Đây là một ranh giới khác giữa kiểm tra và xác nhận. Nếu mã thông báo sản xuất dựa trên các tiện ích mở rộng quan trọng, hãy xác minh hành vi trong thư viện và cấu hình thực tế thay vì suy luận sự hỗ trợ từ JSON có thể đọc được.
Ví dụ đã hoạt động - đọc tiêu đề thực tế và quyết định trường nào cung cấp thông tin xác minh và trường nào chỉ mang tính thông tin
Hãy xem xét `{"alg":"RS256","typ":"JWT","kid":"rotate-7"}`. ToolAcre in đẹp cả ba trường và giải thích rằng việc xác minh RS256 cần có khóa chung của nhà phát hành. Người đánh giá có thể lưu ý thuật toán đã khai báo và mã định danh khóa, sau đó so sánh chúng với chính sách được ghim và bộ khóa đáng tin cậy của máy chủ.
Các lĩnh vực thông báo điều tra nhưng không quyết định gì một cách độc lập. Nếu máy chủ chỉ cho phép một thuật toán khác, không thể tìm thấy `rotate-7` trong nhóm nhà phát hành chính xác hoặc từ chối chữ ký, tiêu đề có thể đọc được sẽ không ghi đè kết quả đó. Tương tự, việc thay đổi văn bản tiêu đề mà không tính toán lại chữ ký hợp lệ sẽ không được chấp nhận.
Rút ra: tiêu đề là đầu vào, không phải quyền hạn — bộ giải mã ToolAcre JWT hiển thị tiêu đề để bạn có thể đọc nó; người xác minh phải quyết định độc lập những gì cần tin tưởng
Hãy coi tiêu đề JWT là đầu vào chứ không phải quyền hạn. Các giá trị của nó có thể giúp chọn trong số các lựa chọn đã được cấu hình cho phép, xác định sự cố xoay có thể xảy ra hoặc giải thích cấu hình không khớp. Họ không thể thiết lập niềm tin vào thuật toán, khóa, URL hoặc loại mã thông báo của riêng họ.
Sử dụng ToolAcre để đọc tiêu đề kiểm tra và hiển thị các giá trị đáng ngờ như thiếu `alg`, `none` hoặc `typ` không mong muốn. Sau đó chuyển sang trình xác minh đã được định cấu hình cho mọi quyết định mang tính hệ quả. Việc giải mã không chứng minh tính xác thực, tính toàn vẹn, ủy quyền hoặc danh tính nhà phát hành, bất kể tiêu đề trông có vẻ hợp lý như thế nào.