JAAS dla ludzi

83

Trudno mi zrozumieć JAAS. Wszystko wydaje się bardziej skomplikowane niż powinno (szczególnie samouczki Sun). Potrzebuję prostego samouczka lub przykładu jak wdrożyć zabezpieczenia (uwierzytelnianie + autoryzacja) w aplikacji java opartej na Struts + Spring + Hibernate z niestandardowym repozytorium użytkowników. Można zaimplementować za pomocą ACEGI.

Dan
źródło
Świetne pytanie. Świetny, zwięzły tytuł za uzasadnioną awarię dokumentacji.
Guido Anselmi
Najlepsze pytania i odpowiedzi na JAAS. Naprawdę ciężko mi było zacząć od tego.
cristiandley
@mattb, chciałbym dodać, jeśli to możliwe, uzupełnienie. Wierzę, że moja odpowiedź może pomóc w zrozumieniu Twojego pytania. Konceptualnie mówiąc.
pss1suporte

Odpowiedzi:

23

Oto kilka linków, których użyłem, aby pomóc zrozumieć JAAS:

http://www.owasp.org/index.php/JAAS_Tomcat_Login_Module

http://www.javaworld.com/jw-09-2002/jw-0913-jaas.html

http://jaasbook.wordpress.com/

http://roneiv.wordpress.com/2008/02/18/jaas-authentication-mechanism-is-it-possible-to-force-j_security_check-to-go-to-a-specific-page/

Zapoznaj się również z instrukcją konfiguracji domen Apache tomcat:

http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

Martlark
źródło
3
Linke do jaasbook nie działa. Został teraz przeniesiony na jaasbook.wordpress.com
Eric B.
@Martlark, chciałbym dodać, jeśli to możliwe, uzupełnienie. Wierzę, że moja odpowiedź może pomóc w zrozumieniu Twojej odpowiedzi. Konceptualnie mówiąc.
pss1suporte
51

Inni użytkownicy udostępnili powyżej kilka bardzo przydatnych linków, więc nie będę się nimi przejmować. Przeprowadziłem podobne badania w JAAS dla aplikacji internetowych i natrafiłem na „przeszkodę dla umysłu”, aż w końcu zdałem sobie sprawę, że JAAS to framework zajmujący się bezpieczeństwem na innej „warstwie” niż aplikacje internetowe w świecie Java. Został stworzony do rozwiązywania problemów związanych z bezpieczeństwem w Javie SE, a nie Java EE.

JAAS to platforma bezpieczeństwa stworzona do zabezpieczania rzeczy na znacznie niższym poziomie niż aplikacja internetowa. Przykładem takich rzeczy jest kod i zasoby dostępne na poziomie JVM, stąd wszystkie te możliwości ustawiania plików strategii na poziomie JVM.

Ponieważ jednak Java EE jest oparta na Java SE, kilka modułów JAAS zostało ponownie wykorzystanych w zabezpieczeniach Java EE, takich jak LoginModules i Callbacks.

Zauważ, że oprócz bezpieczeństwa Java EE, istnieje również zabezpieczenie Spring (wcześniej znane jako Acegi), które podobnie jak natywne zabezpieczenia Java EE rozwiązuje znacznie wyższą „warstwę” w zabezpieczaniu aplikacji internetowych. Jest to osobna implementacja zabezpieczeń i nie jest oparta na standardowym zabezpieczeniu Java EE, chociaż pod wieloma względami zachowuje się podobnie.

Podsumowując, jeśli nie chcesz zabezpieczyć zasobów na poziomie Java SE (klasy, zasoby systemowe), nie widzę żadnego rzeczywistego zastosowania JAAS poza wykorzystaniem wspólnej klasy i interfejsów. Skoncentruj się na używaniu Spring Security lub zwykłego starego zabezpieczenia Java EE, które rozwiązuje wiele typowych problemów z bezpieczeństwem aplikacji internetowych.

lsiu
źródło
2
Samouczek Java EE 6 zakłada zrozumienie podstawowych koncepcji bezpieczeństwa, więc mały przegląd JAAS nie zaszkodzi.
jacktrades
Najlepsze wyjaśnienie na temat JAAS w historii!
David Hofmann
@isiu, chciałbym dodać, jeśli to możliwe, uzupełnienie. Wierzę, że moja odpowiedź może pomóc w zrozumieniu Twojej odpowiedzi. Konceptualnie mówiąc.
pss1suporte
11

javax.security to zbyt skomplikowany interfejs API. W rezultacie istnieją implementatorzy nie tylko LoginModules, ale całego interfejsu API uwierzytelniania i autoryzacji, który tworzy warstwę abstrakcji powyżej, podobnie jak menedżerowie uwierzytelniania i autoryzacji.

Na początek dobrze jest wydrukować to w swojej pamięci.

Po drugie, imho najprostszą biblioteką do konfiguracji i pracy dla JAAS jest Jboss PicketBox . Mówi, jak wykonać uwierzytelnianie i autoryzację za pośrednictwem JBossAuthenticationManager i JBossAuthorizationManager ... Łatwo konfigurowalne za pomocą XML lub adnotacji. Możesz go używać do zarządzania zarówno aplikacjami internetowymi, jak i samodzielnymi aplikacjami.

Jeśli potrzebujesz części autoryzacyjnej do zarządzania dostępem do repozytorium, w zakresie ACL dla zasobów, tego na pewno szukasz.

Problem z bezpieczeństwem polega na tym, że zazwyczaj musisz dostosować go do swoich potrzeb, więc możesz w końcu zaimplementować:

LoginModule - weryfikuje nazwę użytkownika + hasło

CallbackHandler jest używany w ten sposóbnew LoginContext("Sample", new MyCallbackHandler());

CallbackHandler jest przekazywany do bazowych LoginModules, dzięki czemu mogą komunikować się i wchodzić w interakcje z użytkownikami - na przykład monitując o nazwę użytkownika i hasło za pośrednictwem graficznego interfejsu użytkownika. Tak więc wewnątrz Handler otrzymujesz nazwę użytkownika i hasło od użytkownika i są one przekazywane do LoginModule.

LoginContext - wtedy po prostu wywołujesz lc.login (); i uwierzytelnij poświadczenia. LoginContext jest wypełniany uwierzytelnionym tematem.

Jednak pikieta Jboss daje naprawdę łatwy sposób, chyba że potrzebujesz czegoś konkretnego.

lisak
źródło
8

Odpowiedź lsiu jest jedną z niewielu odpowiedzi, które naprawdę "rozumiem";)

Dodając do tej odpowiedzi, naprawdę dobrą referencją na ten temat jest „ Cokolwiek się stało z JAAS? .

Wyjaśnia, w jaki sposób JASPIC jest łącznikiem w Java EE między modelami bezpieczeństwa serwletu i EJB oraz potencjalnie modułem logowania JAAS, ale w wielu przypadkach rola JAAS jest zredukowana do stosunkowo prostej nazwy użytkownika i dostawcy ról w Java EE.

Od tego samego autora pochodzi JAAS in the Enterprise , który jest starszym artykułem, ale dostarcza wielu historycznych informacji na temat tego, dlaczego modele Java SE (JAAS) i Java EE rozeszły się w ten sposób.

Ogólnie jednak kilka typów z JAAS są bezpośrednio stosowane w Java EE, w zasadzie Principal, Subjecti CallbackHandler. Z tych dwóch ostatnich korzysta głównie JASPIC. JASPIC wyjaśniłem w artykule Implementowanie uwierzytelniania kontenerów w Java EE z JASPIC .

Arjan Tijms
źródło
1

Aby zapoznać się z samouczkiem dotyczącym wyłącznie JAAS, sprawdź to . Jest stary, ale powinien pomóc w podstawach JAAS.

znak
źródło