Spring Blog

vi er glade for at kunne meddele, at den første milepæl i Spring Security Kerberos udvidelse nu kan hentes. Udgivelsen er også tilgængelig via Maven milestone repository på http://maven.springframework.org/milestone. Med Spring Security Kerberos-udvidelsen godkendes dine brugere mod din internetapplikation bare ved at åbne URL ‘ en. Der er ingen grund til at indtaste et brugernavn/adgangskode og ingen grund til at installere yderligere programmer.

før jeg går dybere ind i Kerberos, vil jeg gerne introducere Spring Security-udvidelser, et nyt Spring-udvidelsesprojekt dedikeret til at levere udvidelsesmoduler til core Spring Security-projektet. I øjeblikket har vi to udvidelser udviklet der: en SAML2 integration og en Kerberos/SPNEGO integration. Hvert modul har sin egen frigivelsescyklus, så folk kan drage fordel af disse udvidelser, så snart de er klar og ikke behøver at vente på den næste Sikkerhedsudgivelse i foråret. Hvis du har nogen ideer eller endda nogle kode for yderligere udvidelser, så fortæl os!

Kerberos/SPNEGO

i den første milepæl i dette modul giver vi dig en ud-af-boksen Kerberos/SPNEGO løsning til internet applikationer. Kerberos er en standardiseret netværksgodkendelsesprotokol, der er designet til at give stærk godkendelse til klient/serverapplikation, som f.eks. Det er også den anbefalede måde at godkende brugere i et netværk, og det erstatter den forældede og relativt usikre NTLM. Udover dette er det meget udbredt i *niks miljøer, og der er implementeringer til alle større platforme. Så det er meget sandsynligt, at du allerede har Kerberos på plads, og nu kan du også bruge dette i din egen internetapplikation. Det betyder, at din bruger bare indtaster URL ‘ en, og han autentificeres automatisk med sit domænenavn, for eksempel [email protected]. du kan derefter finde ud af dette brugernavn via Spring Security eller endda med anmodning.getRemoteUser (). Hvordan fungerer dette? Her er en kort oversigt:

den sender en GET-anmodning til din internetapplikation (1), som derefter returnerer, at “forhandle” – godkendelse er påkrævet (2). Derefter beder Kerberos-serveren om at få en såkaldt servicebillet (3). Denne service billet, som beviser identiteten af den, der ringer, og nogle yderligere ting til internettet Ansøgning (5). Efter validering af billetten, baseret på nogle delte hemmeligheder mellem din internetapplikation og Kerberos-serveren, får du brugernavnet tilbage.

for at dette skal fungere, skal alle internetapplikationer registreres på Kerberos-serveren og får tildelt en service prinicipal og en delt hemmelighed. For internetapplikationer skal servicelederen være “HTTP / < fuldt kvalificeret domænenavn> @DOMAIN”. For eksempel “HTTP/[email protected]”, hvis din app kører på web.springsource.com. du skal derefter eksportere legitimationsoplysningerne for denne hovedstol til en keytab-fil (delt hemmelighed) og gøre dette tilgængeligt for din ansøgning. Hvert Kerberos-baseret system fungerer på denne måde, men oprettelsen af denne serviceleder og keytab er forskellig mellem systemerne. Jeg vil vise dig, hvordan du gør dette med Microsoft-vinduer og MIT Kerberos, men det skal også fungere med andre implementeringer.

oprettelse af service principal med Microsoft vinduer 2008 Server

selvom dette refererer til Microsoft vinduer 2008 Server, bør det være meget ens i 2003 og endda 2000 Server. I ActiveDirectory opretter du bare en normal domænebruger og tildeler ham derefter en service principal (SPN) og opretter keytab med et kommandolinjeværktøj. Og nu trin for trin:

Opret en normal bruger, som bliver tjenesteprincippet. Brugernavnet og adgangskoden er meningsløst for Kerberos, men du skal selvfølgelig vælge et nyttigt navn, som http-web.springsource.com. bare sørg for at deaktivere indstillingen “Bruger skal ændre adgangskode ved næste logon” og aktivere “adgangskode udløber aldrig”.

derefter skal du bruge kommandolinjeværktøjet “ktpass.eks”. Det er allerede inkluderet i vinduer 2008 Server, i tidligere versioner skal du installere det selv. Bare sørg for at du bruger en version, der matcher din serverversion, og også lokaliteten skal matche. Dette værktøj tildeler service principal name (SPN) til din tidligere oprettede bruger og eksporterer brugernøglen til en keytab-fil. Hvis din tjenesteleder er “HTTP/[email protected]” og din bruger er http-web.springsource.com, så skal din ktpass-kommando se sådan ud:


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

ktpass vil bede dig om noget kodeord. Du bør vælge nogle sikre tilfældige en for det. Hvis du nu har en fil http-internet.keytab i din mappe, så fungerede alt fint. Denne fil er nødvendig senere i din ansøgning, da den indeholder den delte hemmelighed for at validere servicebilletterne.

oprettelse af serviceinstans med MIT Kerberos

på *ni-systemer og også i Mac OS, er MIT Kerberos-implementeringen meget udbredt. Med MIT Kerberos er det endnu enklere. Du skal bare åbne kadmin-konsollen og udføre følgende kommandoer:


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

du skal derefter have en fil http-internet.keytab under root. Denne fil er senere nødvendig i din ansøgning, da den indeholder den delte hemmelighed for at validere servicebilletterne.

konfiguration af foråret sikkerhed

først og fremmest kravene:

  • forår sikkerhed 3.0.0 M2
  • søn JRE/JDK 1.6.Kerberos miljø
  • Kerberos miljø
  • som understøtter SPNEGO)

for at bruge Kerberos-modulet i Spring Security skal du bare erklære et filter, et godkendelsesindgangspunkt og en godkendelsesudbyder. Vi inkluderede en prøveapp, som du kan bruge som udgangspunkt. Du skal bare konfigurere dit tjenestehovednavn og placere din generer keytab der. Prøven app er inkluderet i overførslen nævnt ovenfor.

hvis du åbner sikkerheden.du ser en grundlæggende Fjedersikkerhedskonfiguration, der bruger det nye Kerberos-modul.

de to første bønner (SpnegoEntryPoint og SpnegoAuthenticationProcessingFilter) er ansvarlige for håndtrykket, og Kerberosserviceauthentication provideren validerer derefter endelig servicebilletten. I øjeblikket støtter vi kun Kerberos/SPNEGO implementering, som er inkluderet i Suns JRE / JDK. Da du kun får brugernavnet tilbage fra Kerberos, har du også brug for en Userdetailservice for at hente rollerne og måske nogle andre brugerattributter. I denne prøve bruger vi bare en dummy-implementering for at gøre testen lettere.

som du kan se, har vi allerede udfyldt tjenesten prinicipal navn og keytab placering. Skift disse værdier til dit behov, og sørg for, at den tidligere genererede keytab er tilgængelig under denne placering.

start nu din server, og prøv at prøve en spnego-godkendelse. Du skal se dit fulde domænenavn i søgemaskinen. I din kode kan du hente brugernavnet med de normale Forårssikkerhedsklasser eller endda med standard Java servlet-opkaldsanmodning.getRemoteUser (). Hvis det ikke virker (måske ser du en tom side), skal du kontrollere disse ting:

  • kontroller logfilen
  • sørg for, at du bruger det fulde kvalificerede domænenavn (ikke IP-adressen og ikke det korte navn) i din URL.
  • hvis du bruger Internetudforsker: Tænd for “vinduer integreret godkendelse” og sørg for, at domænet (i vores tilfælde web.springsource.com) er opført i IE ‘ s lokale intranet site sektion.
  • Tag et kig her.
  • hvis du bruger en Vinduer klient: Klient og Server skal være på forskellige maskiner, fordi ellers vinduer vil bruge NTLM i stedet for Kerberos.
  • Kontroller, om tiden er synkroniseret på alle involverede maskiner.
  • hvis du bruger Microsoft AD, finder du yderligere hjælp her: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • udover dette kan det være kompliceret at oprette et ordentligt Kerberos-miljø, og det er vigtigt at få det rigtigt, før du begynder at bruge Spring Security Kerberos-udvidelsen. De fleste af de problemer, vi støder på under konsultation, er problemer med Kerberos-miljøet og ikke med selve applikationen.

      hvis du ikke vil bruge Spring Security Kerberos-udvidelsen i dit eget Maven-projekt, skal du tilføje Spring Milestone Repository til din pom.- LML. Det skal se sådan ud:

og selvfølgelig afhængigheden:

der er stadig noget arbejde at gøre, for eksempel at også levere Kerberos til Java-klienter og ikke kun til serveren, men vi håber du vil prøve denne milepælsudgivelse og give nogle feedback. Community Forum er det bedste sted at stille spørgsmål eller starte diskussioner om nye funktioner. Alternativt, hvis du finder noget galt, kan du rejse et Jira-problem.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.