[ Pobierz całość w formacie PDF ] .Znacznik określa sposób logowania się, którego używa aplikacja.W tym przypadkuokreślamy podstawowe uwierzytelnienie za pomocą dyrektywy Default.W znacznikuumieszcza się wartości BASIC, DIGEST, FORM i CLIENT-CERT, które odpowiadają typom uwierzytelnienia:podstawowemu, szyfrowanemu, w oparciu o formularz i przy użyciu certyfikatów klienckich.Ouwierzytelnieniach w oparciu o formularz i przy użyciu certyfikatów klienckich będzie mowa w dalszej częścirozdziału.Znacznik określa zakres użycia loginu (tu zawarta jest informacja określającauprawnienia poszczególnych ról).Ten znacznik jest używany tylko w uwierzytelnieniu podstawowym iszyfrowanym.Znacznik zawiera listę ról, która może być użyta przez aplikację.W omówionej metodzie nie ma możliwości udostępniania zasobów wszystkim z pominięciem użytkowników z czarnej listy.Najprostszym wyjściem z tej sytuacji może być utworzenie grupy użytkowników nie należącychdo czarnej listy.Teraz, gdy plik web.xml jest już gotowy, wszystkie żądania dostępu do chronionych danych zostanąprzechwycone przez serwer i dane uwierzytelniające użytkownika zostaną sprawdzone.Dostęp jestprzydzielany, jeśli uprawnienia są ważne, a serwer przypisuje użytkownikowi rolę manager.W przeciwnymrazie dostęp jest zabroniony, a okno dialogowe przeglądarki poprosi użytkownika o kolejną próbę zalogowaniasię.Wyszukiwanie informacji uwierzytelnieniaSerwlet może odczytać informację na temat uwierzytelnienia dzięki dwóm metodom przedstawionym wrozdziale 4: getRemoteUser() i getAuthType().Serwlet API 2.2 zawiera dodatkową metodęgetUserPrincipal(), która zwraca obiekt implementujący interfejs java.security.Principalpublic java.security.Principal HttpServletRequest.getUserPrincipal()Principal to termin techniczny określający uwierzytelniany podmiot.Może nim być użytkownik, grupa,korporacja lub po prostu identyfikator.Interfejs Principal zawiera metodę getName() zwracającą nazwępodmiotu.Metoda getUserPrincipal() służy do określenia uwierzytelnionej tożsamości użytkownika,podczas gdy getRemoteUser()do zapewnienia kompatybilności ze skryptami CGI.MetodaIsUserInRole() została także wprowadzona w Servlet API 2.2.Ta metoda zwraca wartość true, gdyużytkownik należy do określonej roli:public boolean HttpServletRequest.isUserInRole(String role)Ta metoda pozwala na wykonanie pewnych decyzji wewnątrz serwletu.Załóżmy, że deskryptor rozmieszczeniapozwala uzyskać dostęp wielu różnym rolom.Wywołanie tej metody pozwala serwletowi na zróżnicowaniedostępu do danych zależności od uwierzytelnionej roli użytkownika.W deskryptorze rozmieszczeń (pliku opisu rozmieszczenia) można utworzyć pseudonimy, (można sprawić, byzasięg roli mgr będzie taki sam, jak zasięg roli manager).Ma to zastosowanie podczas integracji serwletówpochodzących z innych aplikacji sieciowych, które używają innych nazw ról niż nasz serwlet.Pseudonimy sąkonfigurowane osobno dla każdego serwletu, za pomocą znacznika wewnątrzznacznika , jak pokazano w poniższym fragmencie web.xml:secretSalaryViewermgrmanagerMoże istnieć dowolna ilość znaczników.Należy pamiętać, że dane pseudonimy sąważne tylko podczas dostępu do serwletu poprzez jego zarejestrowaną nazwę.W przykładzie 8.4 serwlet wyświetla klientowi jego nazwę, podmiot, rodzaj uwierzytelnienia (BASIC, DIGEST,FORM, CLIENT-CERT) oraz przynależność do roli manager.Aby uruchomić ten serwlet należy zainstalowaćgo na serwerze sieciowym i zabezpieczyć korzystając ze schematu objaśnionego w poprzednim podpunkcie(należy przy tym upewnić się, że dostęp do nowego jest ograniczony).Przykład 8.4.Szpiegowanie informacji uwierzytelnianiaimport java.io.*;import java.security.*;import javax.servlet.*;import javax.servlet.http.*;public class AuthenticationSnoop extends HttpServlet {public void doGet (HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {res.setContentType("text/html");PrintWriter out = res.getWriter();out.println("AuthenticationSnoop");out.println("");out.println("Nazwa Uzytkownika: "+ req.getRemoteUser());String name = (req.getUserPrincipal() == null) ?null : req.getUserPrincipal().getName();out.println("Nazwa Podmiotu: " + name);out.println("Typ uwierzytelnienia: " + req.getAuthType());out.println("Przynależność do roli Manager: " + req.isUserInRole("manager"));out.println("");out.println("");.}}Po wykonaniu programu powinniśmy zobaczyć na ekranie:This is a password protected resourceNazwa Użytkownika: jhunterNazwa Podmiotu: jhunterTyp Uwierzytelnienia: BASICPrzynależność do roli Manager: falseUwierzytelnienie w oparciu o formularzZamiast uwierzytelnienia poprzez HTTP, serwlety mogą używać formularzy HTML.Użycie tej technikipozwala użytkownikom wejść na chronioną witrynę poprzez odpowiednio zaprojektowaną, przyjaznąużytkownikowi stronę logującą.Wyobrazmy sobie, że prowadzimy bank internetowy.Lepiej utworzyćniestandardowy formularz logujący (rys.8.1), który poprosi o odpowiednie dane, niż korzystać z obskurnegookna przeglądarki.Wiele banków i innych serwisów online wybrało uwierzytelnienie oparte o formularz.Implementacja takiegosystemu jest stosunkowo prostym zadaniem, ponieważ takie uwierzytelnienie jest wbudowane w Servlet API2.2.Aby przekształcić uwierzytelnienie z podstawowego na oparte o formularz należy zamienić fragment plikuweb.xml z przykładu 8.3 na fragment z przykładu 8.5.Rysunek 8.1.Strona logująca do banku onlinePrzykład 8.5.Konfiguracja uwierzytelnienia opartego o formularzFORM
[ Pobierz całość w formacie PDF ] zanotowane.pldoc.pisz.plpdf.pisz.plmikr.xlx.pl
|