Spring Blog

z przyjemnością informujemy, że pierwszy kamień milowy rozszerzenia Spring Security Kerberos jest już dostępny do pobrania. Wydanie jest również dostępne w repozytorium Maven milestone pod adresem http://maven.springframework.org/milestone. Dzięki rozszerzeniu Spring Security Kerberos użytkownicy są uwierzytelniani w aplikacji internetowej tylko poprzez otwarcie adresu URL. Nie ma potrzeby wprowadzania nazwy użytkownika/hasła ani instalowania dodatkowego oprogramowania.

zanim przejdę dalej do Kerberos, chciałbym przedstawić Spring Security Extensions, nowy projekt Spring Extension dedykowany modułom rozszerzeń dla core Spring Security project. Obecnie mamy tam opracowane dwa rozszerzenia: integrację SAML2 oraz integrację Kerberos/SPNEGO. Każdy moduł będzie miał swój własny cykl wydawniczy, dzięki czemu ludzie będą mogli korzystać z tych rozszerzeń, gdy tylko będą gotowe i nie będą musieli czekać na kolejną wiosenną wersję bezpieczeństwa. Jeśli masz jakieś pomysły, a nawet jakiś kod do dalszych rozszerzeń, proszę powiedz nam!

Kerberos/SPNEGO

w pierwszym etapie tego modułu zapewniamy gotowe rozwiązanie Kerberos/SPNEGO dla aplikacji internetowych. Kerberos jest standardowym protokołem uwierzytelniania sieciowego, który został zaprojektowany w celu zapewnienia silnego uwierzytelniania dla aplikacji klient / serwer, takich jak aplikacje internetowe, w których przeglądarka jest klientem. Jest to również zalecany sposób uwierzytelniania użytkowników w sieci Windows i zastępuje przestarzałe i stosunkowo niebezpieczne NTLM. Poza tym jest szeroko stosowany w środowiskach * NIX i istnieją implementacje dla każdej większej platformy. Jest więc bardzo prawdopodobne, że masz już Kerberos i teraz możesz go używać również we własnej aplikacji internetowej. Oznacza to, że użytkownik po prostu wprowadza adres URL i jest automatycznie uwierzytelniany za pomocą nazwy użytkownika domeny, na przykład [email protected]. następnie możesz dowiedzieć się tej nazwy użytkownika za pośrednictwem Spring Security lub nawet z żądaniem.getRemoteUser(). Jak to działa? Oto krótki przegląd:

przeglądarka wysyła żądanie GET do Twojej aplikacji internetowej (1), które następnie zwraca, że wymagane jest uwierzytelnienie „negocjuj” (2). Następnie przeglądarka poprosi Serwer Kerberos o uzyskanie tzw. biletu serwisowego (3). Następnie przeglądarka wysyła ten bilet serwisowy, który potwierdza tożsamość dzwoniącego i kilka dodatkowych rzeczy do aplikacji internetowej (5). Po zatwierdzeniu zgłoszenia, w oparciu o jakąś wspólną tajemnicę między aplikacją internetową a serwerem Kerberos, odzyskujesz nazwę użytkownika.

aby to zadziałało, każda aplikacja webowa musi być zarejestrowana na serwerze Kerberos i uzyskać prinicipal usługi i wspólny sekret przypisany. W przypadku aplikacji internetowych usługą główną musi być „HTTP / <pełna kwalifikowana nazwa domeny> @domena”. Na przykład „HTTP/[email protected]”, jeśli aplikacja działa na web.springsource.com. następnie musisz wyeksportować poświadczenia tego zleceniodawcy do pliku keytab (shared secret) i udostępnić je aplikacji. Każdy system oparty na Kerberos będzie działał w ten sposób, ale tworzenie tego głównego usługi i klawiatury różni się między systemami. Pokażę Ci, jak to robisz z Microsoft Windows i MIT Kerberos, ale powinno to działać również z innymi implementacjami.

Tworzenie usługi principal z Microsoft Windows 2008 Server

chociaż odnosi się to do Microsoft Windows 2008 Server, powinno być bardzo podobne w 2003, a nawet 2000 Server. W ActiveDirectory wystarczy utworzyć zwykłego użytkownika domeny, a następnie przypisać mu service principal (SPN) i utworzyć tablicę kluczy za pomocą narzędzia wiersza poleceń. A teraz krok po kroku:

Stwórz normalnego użytkownika, który stanie się Usługobiorcą. Nazwa użytkownika i hasło nie mają znaczenia dla Kerberos, ale powinieneś oczywiście wybrać użyteczną nazwę, taką jak http-web.springsource.com. upewnij się tylko, że dezaktywujesz opcję „użytkownik musi zmienić hasło przy następnym logowaniu” i aktywujesz „hasło nigdy nie wygasa”.

następnie musisz użyć narzędzia wiersza poleceń ” ktpass.exe”. Jest już zawarty w Windows 2008 Server, we wcześniejszych wersjach musisz go zainstalować samodzielnie. Upewnij się tylko, że używasz wersji, która pasuje do wersji serwera, a także ustawienia regionalne powinny pasować. To narzędzie przypisze nazwę service principal name (SPN) do wcześniej utworzonego użytkownika i wyeksportuje Klucz użytkownika do pliku keytab. Jeśli zleceniodawcą usługi jest „HTTP/[email protected]” a Twoim użytkownikiem jest http-web.springsource.com, wtedy twoje polecenie ktpass powinno wyglądać tak:


ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *

ktpass poprosi Cię o podanie hasła. Powinieneś wybrać jakiś Bezpieczny losowy dla niego. Jeśli masz teraz plik http-web.keytab w katalogu, a potem wszystko działało dobrze. Ten plik jest potrzebny później w Twojej aplikacji, ponieważ zawiera udostępniony sekret do weryfikacji biletów serwisowych.

Tworzenie usługi principal z MIT Kerberos

na systemach *NIX, a także w systemie Mac OS X, implementacja MIT Kerberos jest szeroko stosowana. Z MIT Kerberos jest to jeszcze prostsze. Wystarczy otworzyć konsolę kadmin i wykonać następujące polecenia:


kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com

następnie powinieneś mieć plik http-web.keytab pod korzeniem. Ten plik jest później potrzebny w Twojej aplikacji, ponieważ zawiera udostępniony sekret do weryfikacji biletów serwisowych.

Konfigurowanie Spring Security

przede wszystkim wymagania:

  • Spring Security 3.0.0 m2
  • SUN JRE/JDK 1.6.x
  • środowisko Kerberos
  • przeglądarka obsługująca SPNEGO (Firefox, IE, Safari)

aby korzystać z modułu Kerberos w Spring Security, wystarczy zadeklarować filtr, punkt wejścia uwierzytelniania i dostawcę uwierzytelniania. Dołączyliśmy przykładową aplikację internetową, której możesz użyć jako punktu wyjścia. Musisz tylko skonfigurować nazwę głównej usługi i umieścić tam swój keytab generowania. Przykładowa aplikacja jest dołączona do pobrania wymienionego powyżej.

po otwarciu zabezpieczenia.plik xml przykładowej aplikacji, który znajduje się w /src/main/webapp/WEB-INF, widać podstawową konfigurację Spring Security, która wykorzystuje nowy moduł Kerberos.

dwie pierwsze fasolki (SpnegoEntryPoint i SpnegoAuthenticationProcessingFilter) są odpowiedzialne za uścisk dłoni, a KerberosServiceAuthenticationProvider następnie w końcu weryfikuje bilet serwisowy. Obecnie wspieramy tylko implementację Kerberos / SPNEGO, która jest zawarta w JRE / JDK firmy SUN. Ponieważ odzyskujesz tylko nazwę Użytkownika z Kerberos, potrzebujesz również UserDetailsService, aby pobrać role i być może inne atrybuty użytkownika. W tym przykładzie używamy tylko pozorowanej implementacji, aby ułatwić testowanie.

jak widać, wypełniliśmy już Nazwę serwisu i lokalizację klucza. Zmień te wartości dla swoich potrzeb i upewnij się, że wcześniej wygenerowany keytab jest dostępny w tej lokalizacji.

Teraz uruchom serwer i spróbuj spróbować uwierzytelnienia SPNEGO. Powinieneś zobaczyć swoją pełną nazwę użytkownika domeny w przeglądarce. W kodzie można pobrać nazwę Użytkownika za pomocą zwykłych klas zabezpieczeń Spring lub nawet za pomocą standardowego żądania wywołania Java servlet.getRemoteUser(). Jeśli nie działa (może widzisz pustą stronę), sprawdź te rzeczy:

  • Sprawdź plik dziennika
  • upewnij się, że używasz pełnej kwalifikowanej nazwy domeny (Nie adresu IP i nie krótkiej nazwy) w adresie URL.
  • jeśli używasz Internet Explorera: Włącz „uwierzytelnianie zintegrowane z systemem Windows” i upewnij się, że domena (w naszym przypadku web.springsource.com) znajduje się w lokalnej sekcji intranetowej IE.
  • jeśli używasz Firefoksa: zajrzyj tutaj.
  • jeśli używasz klienta Windows: Klient i serwer muszą być na różnych maszynach, ponieważ w przeciwnym razie Windows użyje NTLM zamiast Kerberos.
  • sprawdź, czy czas jest zsynchronizowany na wszystkich zaangażowanych maszynach.
  • jeśli używasz reklamy Microsoft, znajdziesz tutaj dalszą pomoc: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • poza tym skonfigurowanie odpowiedniego środowiska Kerberos może być skomplikowane i ważne jest, aby to zrobić tuż przed rozpoczęciem korzystania z rozszerzenia Spring Security Kerberos. Większość problemów, które napotykamy podczas konsultacji, to problemy ze środowiskiem Kerberos, a nie z samą aplikacją.

      jeśli nie chcesz używać rozszerzenia Spring Security Kerberos w swoim własnym projekcie Maven, musisz dodać repozytorium Spring Milestone do swojego pom.xml. Powinno to wyglądać tak:

i oczywiście zależność:

jest jeszcze trochę do zrobienia, na przykład, aby zapewnić również Kerberos dla klientów Java i nie tylko dla serwera, ale mamy nadzieję, że wypróbujesz tę przełomową wersję i dostarczysz kilka opinii. Forum społeczności jest najlepszym miejscem do zadawania pytań lub rozpoczęcia dyskusji na temat nowych funkcji. Alternatywnie, jeśli znajdziesz coś nie tak, możesz zgłosić problem z Jira.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.