JAAS cho con người


83

Tôi đang gặp khó khăn trong việc hiểu JAAS. Tất cả có vẻ phức tạp hơn mức cần thiết (đặc biệt là các hướng dẫn về Mặt trời). Tôi cần một hướng dẫn hoặc ví dụ đơn giản về cách triển khai bảo mật (xác thực + ủy quyền) trong ứng dụng java dựa trên Struts + Spring + Hibernate với kho lưu trữ người dùng tùy chỉnh. Có thể được thực hiện bằng ACEGI.


Câu hỏi tuyệt vời. Tiêu đề tuyệt vời cho một lỗi tài liệu hợp pháp.
Guido Anselmi

Hỏi và đáp hay nhất trên JAAS. Tôi đã gặp rất nhiều khó khăn khi cố gắng bắt đầu với nó.
cristiandley

@mattb, tôi muốn làm một phụ lục, nếu có thể. Tôi tin rằng câu trả lời của tôi có thể giúp hiểu câu hỏi của bạn. Nói một cách khái niệm.
pss1suporte

Câu trả lời:


23

3
Linux cho jaasbook đã chết. Nó đã được chuyển đến jaasbook.wordpress.com
Eric B.

@Martlark, tôi muốn làm một phụ lục, nếu có thể. Tôi tin rằng câu trả lời của tôi có thể giúp hiểu câu trả lời của bạn. Nói một cách khái niệm.
pss1suporte

51

Những người dùng khác đã cung cấp một số liên kết rất hữu ích ở trên nên tôi sẽ không bận tâm đến các liên kết. Tôi đã thực hiện một nghiên cứu tương tự trong JAAS cho ứng dụng web và đã gặp phải "rào cản tâm trí" cho đến khi cuối cùng tôi nhận ra JAAS là một khung công tác xử lý bảo mật ở một "lớp" khác so với các ứng dụng web trong Thế giới Java. Nó được xây dựng để giải quyết các vấn đề bảo mật trong Java SE chứ không phải Java EE.

JAAS là một khung bảo mật được xây dựng để bảo mật mọi thứ ở cấp độ thấp hơn nhiều so với ứng dụng web. Một số ví dụ về những điều này là mã và tài nguyên có sẵn ở cấp JVM, do đó, tất cả những khả năng này có thể thiết lập các tệp chính sách ở cấp JVM.

Tuy nhiên, vì Java EE được xây dựng dựa trên Java SE, một số mô-đun từ JAAS đã được sử dụng lại trong bảo mật Java EE như LoginModules và Callbacks.

Lưu ý rằng ngoài bảo mật Java EE, còn có bảo mật Spring (trước đây gọi là Acegi), tương tự như bảo mật Java EE gốc giải quyết "lớp" cao hơn nhiều trong vấn đề bảo mật ứng dụng web. Nó là một triển khai bảo mật riêng biệt và không được xây dựng dựa trên bảo mật Java EE tiêu chuẩn, mặc dù nó hoạt động tương tự về nhiều mặt.

Tóm lại, trừ khi bạn đang tìm cách bảo mật tài nguyên ở cấp Java SE (các lớp, Tài nguyên hệ thống), tôi không thấy bất kỳ cách sử dụng thực sự nào của JAAS ngoài việc sử dụng các giao diện và lớp chung. Chỉ cần tập trung vào việc sử dụng Spring Security hoặc bảo mật Java EE cũ đơn giản, cả hai đều giải quyết được nhiều vấn đề bảo mật ứng dụng web phổ biến.


2
Hướng dẫn Java EE 6 giả định hiểu các khái niệm bảo mật cơ bản, vì vậy một chút tổng quan về JAAS sẽ không ảnh hưởng gì.
jacktrades

Lời giải thích hay nhất về JAAS từ trước đến nay!
David Hofmann

@isiu, nếu có thể mình sẽ làm thêm một phụ lục. Tôi tin rằng câu trả lời của tôi có thể giúp hiểu câu trả lời của bạn. Nói một cách khái niệm.
pss1suporte

11

javax.security là API quá phức tạp của imho. Do đó, có những người triển khai không chỉ LoginModules mà còn toàn bộ api xác thực và ủy quyền, tạo ra lớp trừu tượng ở trên, như trình quản lý Xác thực & Cấp quyền.

Đối với những người mới bắt đầu, tốt nhất là bạn nên in cái này vào bộ nhớ của mình.

Thứ hai, thư viện đơn giản nhất, setup & go cho JAAS là Jboss PicketBox . Nó cho biết cách thực hiện xác thực và ủy quyền thông qua JBossAuthenticationManager và JBossAuthorizationManager ... Có thể cấu hình dễ dàng qua XML hoặc Annotations. Bạn có thể sử dụng nó để quản lý cả ứng dụng web và ứng dụng độc lập.

Nếu bạn cần phần ủy quyền để quản lý quyền truy cập kho lưu trữ, về mặt ACL cho tài nguyên, đây là điều bạn đang tìm kiếm chắc chắn.

Vấn đề với bảo mật là, thông thường bạn cần phải tùy chỉnh nó theo nhu cầu của mình, vì vậy bạn có thể kết thúc việc triển khai:

LoginModule - xác minh userName + Password

CallbackHandler được sử dụng như thế nàynew LoginContext("Sample", new MyCallbackHandler());

CallbackHandler được chuyển đến các LoginModules bên dưới để chúng có thể giao tiếp và tương tác với người dùng - ví dụ: nhắc nhập tên người dùng và mật khẩu thông qua giao diện người dùng đồ họa. Vì vậy, bên trong Handler, bạn lấy tên người dùng và mật khẩu từ người dùng và nó được chuyển đến LoginModule.

LoginContext - sau đó bạn chỉ cần gọi lc.login (); và xác thực thông tin đăng nhập. LoginContext được điền với Chủ đề đã xác thực.

Tuy nhiên, hộp chọn Jboss cung cấp cho bạn một cách thực sự dễ dàng, trừ khi bạn cần một cái gì đó cụ thể.


8

Câu trả lời của lsiu là một trong số ít câu trả lời ở đây thực sự "hiểu được";)

Thêm vào câu trả lời đó, một tài liệu tham khảo thực sự tốt về chủ đề này là Dù đã xảy ra với JAAS? .

Nó giải thích cách JASPIC là liên kết trong Java EE giữa các mô hình bảo mật Servlet và EJB và có khả năng là một mô-đun đăng nhập JAAS, nhưng trong nhiều trường hợp, vai trò của JAAS bị giảm xuống thành một nhà cung cấp tên người dùng và vai trò tương đối đơn giản trong Java EE.

Cùng một tác giả là JAAS in the Enterprise , đây là một bài viết cũ hơn nhưng cung cấp rất nhiều cơ sở lịch sử về lý do tại sao các mô hình Java SE (JAAS) và Java EE lại khác biệt như cách chúng đã làm.

Nhìn chung nhưng một vài loại từ JAAS được sử dụng trực tiếp trong Java EE, về cơ bản Principal, SubjectCallbackHandler. Hai thứ sau chủ yếu được sử dụng bởi JASPIC. Tôi đã giải thích về JASPIC trong bài viết Triển khai xác thực vùng chứa trong Java EE với JASPIC .


2

Tôi không thể nói quá nhiều với bản thân JAAS, nhưng hướng dẫn "các bước được đề xuất" này về Spring Security và hướng dẫn tham khảo đều là những tài nguyên khá tốt về Spring Security - nếu thiết lập của bạn gần như đơn giản, bạn không thực sự cần làm nhiều hơn là đọc những thứ này.


Hướng dẫn "các bước được đề xuất" đã chuyển đến đây: static.springsource.org/spring-security/site/start-here.html
aliopi

1

Để có hướng dẫn hoàn toàn về JAAS, hãy xem điều này . Nó cũ nhưng sẽ giúp bạn với những kiến ​​thức cơ bản về JAAS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.