Spring Blog

we zijn verheugd om aan te kondigen dat de eerste mijlpaal van de Spring Security Kerberos extensie nu beschikbaar is om te downloaden. De release is ook beschikbaar via de Maven milestone repository op http://maven.springframework.org/milestone. Met de Spring Security Kerberos extensie, uw gebruikers worden geverifieerd tegen uw webapplicatie gewoon door het openen van de URL. Er is geen noodzaak om een gebruikersnaam/wachtwoord in te voeren en geen behoefte om extra software te installeren.

voordat ik dieper inga op Kerberos, wil ik graag Spring Security Extensions introduceren, een nieuw Spring Extension project gewijd aan uitbreidingsmodules voor het core Spring Security project. Momenteel hebben we daar twee extensies ontwikkeld: een SAML2 integratie en een Kerberos/SPNEGO integratie. Elke module zal zijn eigen release cyclus hebben, zodat mensen kunnen profiteren van deze extensies zodra ze klaar zijn en niet hoeven te wachten op de volgende lente Security release. Als u ideeën of zelfs een code voor verdere extensies, vertel het ons!

Kerberos / SPNEGO

in de eerste mijlpaal van deze module bieden wij u een out-of-the-box Kerberos/SPNEGO oplossing voor webapplicaties. Kerberos is een gestandaardiseerd netwerkverificatieprotocol, dat is ontworpen om sterke authenticatie te bieden voor client/server-applicatie, zoals webapplicaties waarbij de Browser de client is. Het is ook de aanbevolen manier om gebruikers te authenticeren in een Windows-netwerk en het vervangt de verouderde en relatief onveilige NTLM. Daarnaast wordt het veel gebruikt in * NIX-omgevingen en zijn er implementaties voor elk belangrijk platform. Dus, het is zeer waarschijnlijk dat je al Kerberos op zijn plaats en nu kunt u dit ook gebruiken in uw eigen webapplicatie. Dat betekent dat uw gebruiker gewoon de URL invoert en hij automatisch wordt geverifieerd met zijn domein gebruikersnaam, bijvoorbeeld [email protected]. u kunt dan vinden deze gebruikersnaam via Spring Security of zelfs met verzoek.getRemoteUser(). Hoe werkt dit? Hier is een kort overzicht:

de Browser stuurt een GET request naar uw webapplicatie (1), die vervolgens retourneert dat “negotiate” authenticatie vereist is (2). De Browser zal dan de Kerberos Server vragen om een zogenaamd service ticket (3). De Browser stuurt vervolgens dit serviceticket, dat de identiteit van de beller bewijst, en enkele extra dingen naar de webapplicatie (5). Na het valideren van het ticket, gebaseerd op een gedeeld geheim tussen je webapplicatie en de Kerberos server, krijg je de gebruikersnaam terug.

om dit te laten werken, moeten alle webapplicaties worden geregistreerd op de Kerberos server en krijgt een service prinicipal en een gedeeld geheim toegewezen. Voor webtoepassingen moet de service principal “HTTP/<full qualified domain name>@DOMAIN”zijn. Bijvoorbeeld “HTTP/[email protected]”, als uw app draait op web.springsource.com.vervolgens moet u de referenties van deze principal exporteren naar een keytab-bestand (gedeeld geheim) en dit beschikbaar maken voor uw toepassing. Elk op Kerberos gebaseerd systeem zal op deze manier werken, maar de creatie van deze service principal en de keytab is anders tussen de systemen. Ik zal je laten zien hoe je dit doet met Microsoft Windows en MIT Kerberos, maar het zou ook moeten werken met andere implementaties.

service principal aanmaken met Microsoft Windows 2008 Server

hoewel dit verwijst naar Microsoft Windows 2008 Server, zou het zeer vergelijkbaar moeten zijn in 2003 en zelfs 2000 Server. In ActiveDirectory maak je gewoon een normale domeingebruiker aan en wijs hem dan een service principal (SPN) toe, en maak je de keytab aan met een command line utility. En nu stap voor stap:

Maak een normale gebruiker aan die de service principal wordt. De gebruikersnaam en het wachtwoord zijn zinloos voor Kerberos, maar je moet natuurlijk een nuttige naam kiezen, zoals http-web.springsource.com. zorg ervoor dat u de optie deactiveren “gebruiker moet wachtwoord wijzigen bij de volgende aanmelding” en Activeren “wachtwoord verloopt nooit”.

daarna moet u het commandoregelgereedschap “ktpass” gebruiken.executable”. Het is al opgenomen in Windows 2008 Server, in eerdere versies moet je het zelf installeren. Zorg ervoor dat u een versie gebruikt die overeenkomt met uw serverversie en ook de lokale moet overeenkomen. Deze tool zal de service principal name (SPN) toewijzen aan uw eerder gemaakte gebruiker en zal de user key exporteren naar een keytab bestand. Als uw service principal is “HTTP/[email protected]” en uw gebruiker is http-web.springsource.com, dan moet uw ktpass Commando er zo uitzien:


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

ktpass zal u vragen om een wachtwoord. Je moet kiezen voor een aantal veilige willekeurige een voor het. Als u nu een bestand http-web.keytab in je directory, dan werkte alles prima. Dit bestand is later nodig in uw applicatie, omdat het het gedeelde geheim bevat om de servicetickets te valideren.

het maken van service principal met MIT Kerberos

op * NIX systemen en ook in Mac OS X, wordt de MIT Kerberos implementatie veel gebruikt. Met MIT Kerberos is het nog eenvoudiger. Open gewoon de kadmin console en voer de volgende commando ‘ s uit:


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

u moet dan een bestand http-web.keytab onder root. Dit bestand is later nodig in uw applicatie, omdat het het gedeelde geheim bevat om de servicetickets te valideren.

Veerbeveiliging configureren

Ten eerste, de vereisten:

  • Veerzekerheid 3.0.0 M2
  • SUN JRE / JDK 1.6.X
  • Kerberos omgeving
  • Browser die SPNEGO ondersteunt (Firefox, IE, Safari)

om de Kerberos module in Spring Security te gebruiken, hoef je alleen maar een filter, een authenticatie entry point en een authenticatie provider te declareren. We hebben een voorbeeldweb-app opgenomen die u als uitgangspunt kunt gebruiken. U hoeft alleen maar de naam van uw service principal te configureren en uw generate keytab daar te plaatsen. De sample app is opgenomen in de hierboven genoemde download.

Als u de beveiliging opent.xml-bestand van de voorbeeldtoepassing, die onder /src/main/webapp/WEB-INF staat, zie je een basisconfiguratie voor Springbeveiliging die gebruik maakt van de nieuwe Kerberos module.

de eerste twee beans (SpnegoEntryPoint en SpnegoAuthenticationProcessingFilter) zijn verantwoordelijk voor de handshake, en de KerberosServiceAuthenticationProvider valideert dan uiteindelijk het serviceticket. Momenteel ondersteunen we alleen de Kerberos/SPNEGO implementatie die is opgenomen in SUN ‘ s JRE/JDK. Omdat je alleen de gebruikersnaam van Kerberos terugkrijgt, heb je ook een UserDetailsService nodig om de rollen en misschien een aantal andere gebruikersattributen op te halen. In dit voorbeeld gebruiken we gewoon een dummy implementatie om het testen makkelijker te maken.

zoals u kunt zien, hebben we de service prinicipal naam en de keytab locatie al ingevuld. Wijzig deze waarden voor uw behoefte en zorg ervoor dat de eerder gegenereerde keytab beschikbaar is onder deze locatie.

start nu uw server en probeer een SPNEGO authenticatie te proberen. U zou uw volledige domein gebruikersnaam in de Browser moeten zien. In uw code kunt u de gebruikersnaam ophalen met de normale Spring Security klassen of zelfs met de standaard Java servlet call request.getRemoteUser(). Als het niet werkt (misschien zie je een lege pagina), check deze dingen:

  • controleer het logbestand
  • zorg ervoor dat u de volledige gekwalificeerde domeinnaam (niet het IP-adres en niet de Korte naam) in uw URL gebruikt.
  • Als u Internet Explorer gebruikt: Schakel “Windows Integrated Authentication” in en zorg ervoor dat het domein (in ons geval) web.springsource.com) wordt vermeld in IE ‘ s lokale intranet site sectie.
  • Als u Firefox gebruikt: kijk hier.
  • Als u een Windows-client gebruikt: Client en Server moeten op verschillende machines staan, omdat Windows anders NTLM zal gebruiken in plaats van Kerberos.
  • Controleer of de tijd is gesynchroniseerd op alle betrokken machines.
  • Als u Microsoft AD gebruikt, vindt u hier meer hulp: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • naast dit, het opzetten van een goede Kerberos omgeving kan ingewikkeld zijn, en het is belangrijk om dit goed te krijgen voordat u begint met het gebruik van de Spring Security Kerberos extensie. De meeste problemen die we tegenkomen tijdens het consulteren zijn problemen met de Kerberos omgeving en niet met de applicatie zelf.

      als u de Spring Security Kerberos extensie niet wilt gebruiken in uw eigen Maven project, moet u de Spring Milestone Repository aan uw pom toevoegen.xml. Het zou er zo moeten uitzien:

en natuurlijk de afhankelijkheid:

er is nog wat werk te doen, bijvoorbeeld om Kerberos ook te bieden voor Java clients en niet alleen voor de server, maar we hopen dat u deze milestone release zult uitproberen en feedback zult geven. Het Community Forum is de beste plek om vragen te stellen of om discussies te starten over nieuwe functies. Als alternatief, als je iets mis vindt, kun je een Jira probleem aan de orde stellen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.