JSPWiki logo
Strona główna
Zbieranina
Serwisy
Porady
Projekty
Humor sektora IT
TODO
Nowości
Ostatnie zmiany
Kontakt

Find pages
Unused pages
Undefined pages
Page Index

Set your name in
UserPreferences

Edit this page


Referenced by
Java Tomcat_j 2 ee_s...
Porady




JSPWiki v2.2.33


Java JAAS_security


Java/JAAS - autoryzacja za pomocą technologii JAAS

Ten artykuł jest w trakcie tworzenia!

Wstęp

Akronim JAAS tłumaczy się jako Java Authentication and Authorization Service (JAAS). Technologia ta pozwala na oddzielenie sposobu autoryzacji użytkowników od samej aplikacji. Aplikacja tylko 'odpytuje się' klas JAAS czy mając odpowiednie dane można dokonać autoryzacji użytkownika. Pozwala to na zmianę sposobu autoryzacji użytkowników bez zmian w samej aplikacji.

Przykład: użytkownik loguje się do aplikacji za pomocą loginu i hasła. W aplikacji umieszczony zostaje odpowiedni fragment kodu wykorzystujący technologię JAAS. Następnie na poziomie konfiguracji maszyny wirtualnej podaje się jakie klasy (implementujące javax.security.auth.spi.LoginModule) są odpowiedzialne za autoryzację. I tak np. w pierwszej wersji jest to banalna klasa sprawdzająca listę użytkowników z pliku xml. Przy produkcyjnym uruchomieniu aplikacji zmienia się implementację na szukającą użytkowników w bazie SQL. A np. klient uruchamiając aplikację u siebie może podłączyć do niej moduł dokonujący autoryzacji w swoim katalogu LDAP. I to wszystko bez żadnych zmian w kodzie aplikacji!

Terminologia

LoginContext
Pozwala oddzielić metody autentykacji od samej aplikacji. Zawiera metody służące do logowania jak i wylogowania.
Subject
Grupuje informacje należące do określonej jednostki (np. użytkownika). Klasa Subject zawiera dane identyfikujące jednostkę, może także zawierać dodatkowe dane (np. hasła, podpisy cyfrowe, itd.). Instancja klasy Subject jest zwracana przez klasę LoginContext po pomyślnym zalogowaniu.
Principal
Opisuje jednostkową cząstkę informacji należącą do klasy Subject. Może być to np. login, grupy, role.

Sposób działania klienta

Poniżej przedstawiony jest przykładowy schemat procesu logowania w technologii JAAS. Przykład jest dostosowany do technologii web, tzn. na wejściu otrzymujemy parę danych: nazwę użytkownika i hasło. Teraz należy przeprowadzić proces logowania.

  1. Tworzymy instancję klasy implementującej CallbackHandler. Będzie ona odpytywana przez mechanizmy JAAS o dane użytkownika (czyli login i hasło). Przekazujemy jej nasze dane wejściowe.
  2. Tworzymy instancję klasy LoginContext podając jako parametr nazwę aplikacji (jest to klucz identyfikujący moduły wymagane do przeprowadzenia autoryzacji) oraz ww obiekt CallbackHandler.
  3. Przeprowadzamy logowanie wywołując metodę LoginContext.login().
  4. Jeśli nie rzuciła ona wyjatkiem możemy pobrać dane zalogowanego użytkownika: LoginContext.getSubject(). Jeśli ww wywołanie nie zwróciło null, to logowanie się powiodło.

Tyle. Tyle od strony klienta. Żeby samemu oprogramować część serwera należy się trochę bardziej napracować, do wszystkiego jednak dojdziemy.

Sposób działania serwera

Poniżej przedstawiony jest dodatek do poprzedniego punktu rozbudowany o czynności konieczne do wykonania/zaprogramowania po stronie serwera.

  1. Należy utworzyć plik konfiguracyjny jaas.config gdzie podamy które klasy implementujące LoginModule biorą udział w procesie autoryzacji.
  2. Tworzymy odpowiednią klasę, którą określiliśmy wyżej. Klasa ta będzie miała za zadanie 'odpytać' się klasy CallbackHandler z poprzedniego punktu o dane użytkownika wymagane do autoryzacji. Po pobraniu tych danych przeprowadza faktyczną autoryzację (np. sprawdza czy podany użytkowni/hasło pasują do danych z bazy). Na koniec tworzy odpowiednie obiekty Subject i Principal.
  3. Tworzymy klasy implementujące Principal odpowiadające naszemu modelowi danych.

Tyle. Tyle od strony serwera. Posiadając te dane można tworzyć bardzo rozbudowane i elastyczne systemy autoryzacji. Co ważniejsze, zupełnie niezależne do aplikacji.




Go to top   Edit this page   More info...   Attach file...
This page last changed on 19-Sep-2006 09:04:36 GMT by mikolajr.