vi är glada att meddela att den första milstolpen för Spring Security Kerberos Extension nu är tillgänglig för nedladdning. Utgåvan är också tillgänglig via Maven milestone repository på http://maven.springframework.org/milestone. Med Spring Security Kerberos-tillägget autentiseras dina användare mot din webbapplikation bara genom att öppna webbadressen. Det finns ingen anledning att ange ett användarnamn/lösenord och inget behov av att installera ytterligare programvara.
innan jag går djupare in i Kerberos vill jag presentera Spring Security Extensions, ett nytt Spring Extension-projekt som är dedikerat till att tillhandahålla förlängningsmoduler för core Spring Security-projektet. För närvarande har vi två tillägg utvecklade där: en SAML2-integration och en Kerberos/SPNEGO-integration. Varje modul kommer att ha sin egen utgivningscykel, så att människor kan dra nytta av dessa tillägg så snart de är redo och inte behöver vänta på Nästa Vårsäkerhetsutgåva. Om du har några ideer eller till och med någon kod för ytterligare tillägg, berätta för oss!
Kerberos/SPNEGO
i den första milstolpen i denna modul ger vi dig en out-of-the-box Kerberos/SPNEGO lösning för webbapplikationer. Kerberos är ett standardiserat nätverksautentiseringsprotokoll, som är utformat för att ge stark autentisering för klient/serverapplikation, som webbapplikationer där webbläsaren är klienten. Det är också det rekommenderade sättet att autentisera användare i ett Windows-nätverk och det ersätter den föråldrade och relativt osäkra NTLM. Förutom detta används det ofta i * NIX-miljöer och det finns implementeringar för alla större plattformar. Så det är mycket troligt att du redan har Kerberos på plats och nu kan du använda detta också i din egen webbapplikation. Det betyder att din användare bara anger webbadressen och han autentiseras automatiskt med sitt domännamn, till exempel [email protected]. du kan sedan ta reda på detta användarnamn via Spring Security eller till och med med request.getRemoteUser (). Hur fungerar det här? Här är en kort översikt:
webbläsaren skickar en GET-begäran till din webbapplikation (1), som sedan returnerar att ”förhandla” – autentisering krävs (2). Webbläsaren kommer då att be Kerberos-servern att få en så kallad service ticket (3). Webbläsaren skickar sedan denna servicebiljett, som bevisar identiteten på den som ringer, och några ytterligare saker till webbapplikationen (5). Efter att ha validerat biljetten, baserat på någon delad hemlighet mellan din webbapplikation och Kerberos-servern, får du tillbaka användarnamnet.
för att detta ska fungera måste alla webbapplikationer registreras på Kerberos-servern och får en tjänst prinicipal och en delad hemlighet tilldelad. För webbapplikationer måste tjänstens huvudman vara ”HTTP / < fullständigt kvalificerat domännamn> @ domän”. Till exempel ”HTTP/[email protected]”, om din app körs på web.springsource.com. du måste sedan exportera referenserna för denna rektor till en keytab-fil (delad hemlighet) och göra den tillgänglig för din ansökan. Varje Kerberos-baserat system kommer att fungera på detta sätt, men skapandet av denna servicepunkt och keytab skiljer sig mellan systemen. Jag kommer att visa dig hur du gör detta med Microsoft Windows och MIT Kerberos, men det bör också fungera med andra implementeringar.
skapa service principal med Microsoft Windows 2008 Server
även om detta hänvisar till Microsoft Windows 2008 Server, bör det vara mycket lika i 2003 och även 2000 Server. I ActiveDirectory skapar du bara en vanlig domänanvändare och tilldelar honom sedan en servicepunkt (SPN) och skapar keytab med ett kommandoradsverktyg. Och nu steg för steg:
skapa en normal användare som kommer att bli tjänsten rektor. Användarnamnet och lösenordet är meningslöst för Kerberos, men du bör naturligtvis välja ett användbart namn, som http-web.springsource.com. se bara till att du inaktiverar alternativet ”användaren måste ändra lösenord vid nästa inloggning” och Aktivera ”lösenord upphör aldrig”.
Därefter måste du använda kommandoradsverktyget ”ktpass.exe”. Det ingår redan i Windows 2008 Server, i tidigare versioner måste du installera det själv. Se bara till att du använder en version som matchar din serverversion och även platsen ska matcha. Det här verktyget tilldelar tjänsten principal name (SPN) till din tidigare skapade användare och exporterar användarnyckeln till en keytab-fil. Om din huvudman är ”HTTP/[email protected]” och din användare är http-web.springsource.com, då ska ditt ktpass-kommando se ut så här:
ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *
ktpass kommer att be dig om något lösenord. Du bör välja någon säker Slumpmässig för den. Om du nu har en fil http-web.keytab i din katalog, då fungerade allt bra. Den här filen behövs senare i din ansökan, eftersom den innehåller den delade hemligheten för att validera servicebiljetterna.
skapa service principal med MIT Kerberos
på *NIX-system och även i Mac OS X används MIT Kerberos-implementeringen i stor utsträckning. Med MIT Kerberos är det ännu enklare. Öppna bara kadmin-konsolen och kör följande kommandon:
kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com
du bör då ha en fil http-web.keytab under rot. Den här filen behövs senare i din ansökan, eftersom den innehåller den delade hemligheten för att validera servicebiljetterna.
konfigurera Fjädersäkerhet
först och främst kraven:
- våren säkerhet 3.0.0 M2
- SUN JRE / JDK 1.6.x
- Kerberos miljö
- webbläsare som stöder SPNEGO (Firefox, IE, Safari)
för att kunna använda Kerberos-modulen i Spring Security måste du bara deklarera ett filter, en autentiseringspunkt och en autentiseringsleverantör. Vi inkluderade ett exempel på webbapp som du kan använda som utgångspunkt. Du måste bara konfigurera ditt tjänstens huvudnamn och placera din generate keytab där. Exempelappen ingår i nedladdningen som nämns ovan.
om du öppnar säkerheten.xml-fil i exempelprogrammet, som är under /src/main/webapp / WEB-INF, ser du en grundläggande Fjädersäkerhetskonfiguration som använder den nya Kerberos-modulen.
de två första bönorna (SpnegoEntryPoint och SpnegoAuthenticationProcessingFilter) ansvarar för handskakningen, och KerberosServiceAuthenticationProvider validerar sedan slutligen servicebiljetten. För närvarande stöder vi bara Kerberos/SPNEGO-implementeringen som ingår i Suns JRE/JDK. Eftersom du bara får tillbaka användarnamnet från Kerberos behöver du också en UserDetailsService för att hämta rollerna och kanske några andra användarattribut. I det här provet använder vi bara en dummy-implementering för att göra testningen enklare.
som du kan se har vi redan fyllt i tjänsten prinicipal namn och keytab plats. Ändra dessa värden för ditt behov och se till att den tidigare genererade nyckelfliken är tillgänglig under den här platsen.
Starta nu din server och försök att prova en SPNEGO-autentisering. Du bör se ditt fullständiga domän användarnamn i webbläsaren. I din kod kan du hämta användarnamnet med de normala Fjädersäkerhetsklasserna eller till och med med standard Java servlet call request.getRemoteUser (). Om det inte fungerar (kanske du ser en tom sida), kolla dessa saker:
- kontrollera loggfilen
- se till att du använder det fullständiga kvalificerade domännamnet (inte IP-adressen och inte kortnamnet) i din URL.
- om du använder Internet Explorer: slå på ”Windows Integrated Authentication” och se till att domänen (i vårt fall web.springsource.com) listas i IE: s lokala intranätsida.
- om du använder Firefox: ta en titt här.
- om du använder en Windows-klient: Klient och Server måste vara på olika maskiner, för annars kommer Windows att använda NTLM istället för Kerberos.
- kontrollera om tiden är synkroniserad på alla inblandade maskiner.
- om du använder Microsoft AD hittar du ytterligare hjälp här: http://msdn.microsoft.com/en-us/library/ms995329.aspx
förutom detta kan det vara komplicerat att skapa en riktig Kerberos-miljö, och det är viktigt att få det rätt innan du börjar använda Spring Security Kerberos-tillägget. De flesta problem vi stöter på under konsultationen är problem med Kerberos-miljön och inte med själva applikationen.
om du inte vill använda Spring Security Kerberos-tillägget i ditt eget Maven-projekt måste du lägga till Spring Milestone Repository till din pom.xml. Det ska se ut så här:
och naturligtvis beroendet:
det finns fortfarande en del arbete att göra, till exempel för att även ge Kerberos för Java-klienter och inte bara för servern, men vi hoppas att du ska prova denna milstolpe release och ge lite feedback. Communityforumet är det bästa stället att ställa frågor eller att inleda diskussioner om nya funktioner. Alternativt, om du hittar något fel, kan du ta upp en Jira-fråga.