Tôi đang tìm kiếm một khung bảo mật cho phép bảo mật dựa trên vai trò cho các dịch vụ OSGi cũng như các dịch vụ web CXF. Một số thời gian trước đây tôi đã sử dụng bảo mật mùa xuân nhưng khi chúng tôi bây giờ chuyển sang kế hoạch chi tiết nó không phải là một lựa chọn nữa như xa như tôi hiểu. Để cấu hình các quy tắc truy cập, tôi muốn sử dụng chủ yếu tiêu chuẩn @RolesAllowed annotation. Vậy điểm khởi đầu tốt nhất của tôi là gì? Tôi cũng nghĩ về việc thực hiện điều này bản thân mình như là một phần mở rộng kế hoạch chi tiết nhưng tôi thích một giải pháp hiện có.Bảo mật dựa trên vai trò cho OSGi
Trả lời
Tôi khuyên bạn nên sử dụng Apache Shiro, http://shiro.apache.org/.
Nó cung cấp API dễ dàng để xác thực, ủy quyền, mật mã và quản lý phiên. Nó cũng có thể dễ dàng được triển khai bên trong một thùng chứa OSGI. Một số ưu điểm của Apache Shiro được liệt kê tại đây Apache Shiro vs Java EE native APIs
Shiro nằm trong danh sách các khung tôi đang điều tra. Có một số tài liệu hướng dẫn làm thế nào để thiết lập nó cho OSGi? Đặc biệt tôi đang tìm kiếm một số mẫu/gợi ý về cách sử dụng nó cho các dịch vụ OSGi đơn giản và cho các dịch vụ CXF. Các ví dụ tôi tìm thấy luôn đề cập đến các ứng dụng web java (servlet). Vì vậy, ví dụ: nếu tôi tạo một dịch vụ OSGi, làm cách nào để bật shiro trên đó và làm cách nào để làm cho nó tôn vinh chú thích RolesAllowed? Hoặc nếu tôi gọi dịch vụ OSGi thì làm cách nào để xác thực. Tôi đoán sẽ có một số thread địa phương để giữ thông tin auth của tôi. –
Trong thời gian đó, tôi đã tạo phần mở rộng kế hoạch chi tiết để ủy quyền dựa trên các báo cáo JAAS và Java EE (@RolesAllowed, @PermitAll, @DenyAll). Bạn có thể thêm phần mở rộng cho bất kỳ tập tin kế hoạch chi tiết nào. Sau đó nó sẽ quét tất cả các hạt cà phê cho các lần hủy và chặn các cuộc gọi nếu chúng được tìm thấy. Nó sử dụng ngữ cảnh JAAS hiện có để nhận vai trò của người dùng.
Vì vậy, điều kiện tiên quyết cho việc này là thực hiện đăng nhập JAAS. Tôi cũng đã tạo một tính năng CXA JAASAuthentication để đăng nhập vào một người dùng dựa trên nguyên tắc bảo mật cơ bản hoặc tên người dùng chính. Module này hoạt động cùng với sự hỗ trợ của Apache Karaf JAAS. Vì vậy, tất cả người dùng karaf và vai trò áp dụng.
Tôi sẽ tạo một hướng dẫn để cho biết cách sử dụng tất cả điều này khi bản phát hành kế hoạch chi tiết aries bao gồm mô-đun ủy quyền đã hết. Trong thời gian đó, tôi sẽ rất vui nếu bạn dùng thử và báo cáo bất kỳ vấn đề nào bạn gặp phải.
Btw. một cách tiếp cận khác cho karaf là kiểm soát truy cập dựa trên vai trò cho các dịch vụ OSGi được xây dựng trong karaf 3+. Nó không hoạt động với chú thích nhưng cũng dễ sử dụng. Xem http://coderthoughts.blogspot.de/2013/10/role-based-access-control-for-karaf.html
Christian, bạn có một liên kết cho những gì bạn đã làm, như tôi sẽ được quan tâm đến làm cơ bản giống như điều này (có nghĩa là mở rộng kế hoạch chi tiết của bạn) Cảm ơn. –
Điều này sẽ giúp https://github.com/cschneider/Karaf-Tutorial/blob/master/cxf/personservice/server/src/main/resources/OSGI-INF/blueprint/blueprint.xml. Các cấu hình nhận xét sẽ kích hoạt mô-đun authz để cho phép @RolesAllowed và JAASAuthenticationFeature quản lý thông tin đăng nhập. –
Tôi đã định cấu hình Shiro trong ứng dụng của mình, chạy trên Karaf. Tôi quản lý để cấu hình trình quản lý bảo mật, vì vậy tôi có thể đăng nhập/đăng xuất, sử dụng thông tin đăng nhập được lưu trữ trong một DB. Bây giờ tôi đang đấu tranh để tìm cách sử dụng các chú thích đó. Bạn đã tìm thấy một giải pháp? – jhamon
Tôi đã không sử dụng shiro cuối cùng. Thay vào đó tôi sử dụng JaasLoginFeature CXF. Nó thực hiện đăng nhập bằng cách sử dụng thông tin đăng nhập jaas mà sau đó có thể được lấy từ cùng một luồng. Ví dụ, mô-đun kế hoạch chi tiết-aries aries sử dụng đăng nhập jaas. –
hiện CXF Jaas cũng hỗ trợ một tính năng tương tự như 'Phiên' do Shiro cung cấp? – jhamon