Spring Blog

suntem încântați să anunțăm că prima etapă a Spring Security Kerberos Extension este acum disponibilă pentru descărcare. Versiunea este disponibilă și prin depozitul Maven milestone la http://maven.springframework.org/milestone. Cu extensia Spring Security Kerberos, utilizatorii dvs. sunt autentificați împotriva aplicației dvs. web Doar prin deschiderea adresei URL. Nu este nevoie să introduceți un nume de utilizator/parolă și nu este nevoie să instalați software suplimentar.

înainte de a intra mai adânc în Kerberos, aș dori să introduc Spring Security Extensions, un nou proiect de extensie Spring dedicat furnizării de module de extensie pentru proiectul core Spring Security. În prezent avem două extensii dezvoltate acolo: o integrare SAML2 și o integrare Kerberos/SPNEGO. Fiecare modul va avea propriul ciclu de lansare, astfel încât oamenii să poată beneficia de aceste extensii imediat ce sunt gata și nu trebuie să aștepte următoarea versiune de securitate de primăvară. Dacă aveți idei sau chiar un cod pentru extensii suplimentare, vă rugăm să ne spuneți!

Kerberos/SPNEGO

în prima etapă a acestui modul vă oferim o soluție Kerberos/SPNEGO out-of-the-box pentru aplicații web. Kerberos este un protocol standardizat de autentificare în rețea, care este conceput pentru a oferi o autentificare puternică pentru aplicația client/server, cum ar fi aplicațiile web în care browserul este clientul. Este, de asemenea, modul recomandat de autentificare a utilizatorilor într-o rețea Windows și înlocuiește NTLM învechit și relativ nesigur. În afară de aceasta, este utilizat pe scară largă în mediile *NIX și există implementări pentru fiecare platformă majoră. Deci, este foarte probabil să aveți deja Kerberos în loc și acum Puteți utiliza acest lucru și în propria aplicație web. Asta înseamnă că utilizatorul dvs. introduce doar adresa URL și este autentificat automat cu numele său de utilizator de domeniu, de exemplu [email protected]. puteți afla apoi acest nume de utilizator prin Spring Security sau chiar cu cerere.getRemoteUser (). Cum funcționează asta? Iată o scurtă prezentare generală:

browserul trimite o cerere GET către aplicația dvs. web (1), care apoi returnează că este necesară autentificarea „negociază” (2). Browserul va cere apoi serverului Kerberos să obțină un așa numit bilet de serviciu (3). Browser-ul trimite apoi acest bilet de serviciu, care dovedește identitatea apelantului, și unele lucruri suplimentare la aplicația web (5). După validarea biletului, pe baza unor secrete partajate între aplicația dvs. web și serverul Kerberos, primiți înapoi numele de utilizator.

pentru ca acest lucru să funcționeze, fiecare aplicație web trebuie să fie înregistrată la serverul Kerberos și primește un serviciu prinicipal și un secret partajat atribuit. Pentru aplicațiile web, principalul serviciu trebuie să fie „HTTP/<nume de domeniu complet calificat>@DOMAIN”. De exemplu „HTTP/[email protected]” , dacă aplicația dvs. rulează pe web.springsource.com. apoi, trebuie să exportați acreditările acestui principal într-un fișier keytab (secret partajat) și să îl puneți la dispoziția aplicației dvs. Fiecare sistem bazat pe Kerberos va funcționa în acest fel, dar crearea acestui serviciu principal și keytab este diferită între sisteme. Vă voi arăta cum faceți acest lucru cu Microsoft Windows și MIT Kerberos, dar ar trebui să funcționeze și cu alte implementări.

crearea serviciului principal cu Microsoft Windows 2008 Server

deși acest lucru se referă la Microsoft Windows 2008 Server, ar trebui să fie foarte asemănătoare în 2003 și chiar 2000 Server. În ActiveDirectory, trebuie doar să creați un utilizator de domeniu normal și apoi să-i atribuiți un serviciu principal (SPN) și să creați keytab cu un utilitar de linie de comandă. Și acum pas cu pas:

creați un utilizator normal care va deveni principalul serviciu. Numele de utilizator și parola sunt lipsite de sens pentru Kerberos, dar ar trebui, desigur, să alegeți un nume util, cum ar fi http-web.springsource.com. asigurați-vă că dezactivați opțiunea „Utilizatorul trebuie să schimbe parola la următoarea conectare” și activați „parola nu expiră niciodată”.

după aceea, trebuie să utilizați instrumentul de linie de comandă „ktpass.exe”. Este deja inclus în Windows 2008 Server, în versiunile anterioare trebuie să îl instalați singur. Doar asigurați-vă că utilizați o versiune care se potrivește cu versiunea de server și, de asemenea, locale ar trebui să se potrivească. Acest instrument va atribui numele principal al serviciului (SPN) utilizatorului creat anterior și va exporta cheia utilizatorului într-un fișier keytab. Dacă directorul de serviciu este „HTTP/[email protected]” și utilizatorul dvs. este http-web.springsource.com, atunci comanda ktpass ar trebui să arate astfel:


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

ktpass vă va solicita o parolă. Ar trebui să alegeți unul aleatoriu sigur pentru el. Dacă aveți acum un fișier http-web.keytab în directorul dvs., atunci totul a funcționat bine. Acest fișier este necesar mai târziu în aplicația dvs., deoarece conține secretul partajat pentru a valida biletele de serviciu.

crearea serviciului principal cu MIT Kerberos

pe sistemele *NIX și, de asemenea, în Mac OS X, implementarea MIT Kerberos este utilizată pe scară largă. Cu MIT Kerberos este chiar mai simplu. Trebuie doar să deschideți consola kadmin și să executați următoarele comenzi:


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

ar trebui să aveți apoi un fișier http-web.keytab sub rădăcină. Acest fișier este ulterior necesar în aplicația dvs., deoarece conține secretul partajat pentru a valida biletele de serviciu.

configurarea securității de primăvară

în primul rând, cerințele:

  • securitate de primăvară 3.0.0 M2
  • SUN JRE/JDK 1.6.X
  • Kerberos mediu
  • Browser care acceptă SPNEGO (Firefox, IE, Safari)

pentru a utiliza modulul Kerberos în Spring Security, trebuie doar să declarați un filtru, un punct de intrare de autentificare și un furnizor de autentificare. Am inclus un exemplu de aplicație web pe care o puteți utiliza ca punct de plecare. Trebuie doar să configurați numele principal de serviciu și locul genera keytab acolo. Aplicația eșantion este inclusă în descărcarea menționată mai sus.

dacă deschideți securitatea.fișier xml al aplicației eșantion, care se află sub / src/main/webapp / WEB-INF, vedeți o configurație de bază de securitate de primăvară care utilizează noul modul Kerberos.

primele două fasole (SpnegoEntryPoint și SpnegoAuthenticationProcessingFilter) sunt responsabile pentru strângerea de mână, iar KerberosServiceAuthenticationProvider validează în cele din urmă biletul de serviciu. În prezent, susținem doar implementarea Kerberos/SPNEGO, care este inclusă în JRE/JDK SUN. Pe măsură ce primiți doar numele de utilizator de la Kerberos, aveți nevoie și de un UserDetailsService pentru a prelua rolurile și poate alte atribute ale utilizatorului. În acest eșantion folosim doar o implementare fictivă pentru a facilita testarea.

după cum puteți vedea, am completat deja numele serviciului prinicipal și locația keytab. Modificați aceste valori pentru nevoile dvs. și asigurați-vă că tastatura generată anterior este disponibilă în această locație.

acum porniți serverul și încercați să încercați o autentificare SPNEGO. Ar trebui să vedeți numele de utilizator complet al domeniului în Browser. În codul dvs. puteți prelua numele de utilizator cu clasele normale de securitate de primăvară sau chiar cu cererea standard de apel Java servlet.getRemoteUser (). Dacă nu funcționează (poate vedeți o pagină goală), verificați aceste lucruri:

  • verificați fișierul jurnal
  • asigurați-vă că utilizați numele de domeniu complet calificat (nu adresa IP și nu numele scurt) în adresa URL.
  • dacă utilizați Internet Explorer: activați „autentificare integrată Windows” și asigurați-vă că domeniul (în cazul nostru web.springsource.com) este listat în secțiunea site-ului intranet local IE.
  • dacă utilizați Firefox: aruncați o privire aici.
  • dacă utilizați un client Windows: Clientul și serverul trebuie să fie pe mașini diferite, deoarece altfel Windows va folosi NTLM în loc de Kerberos.
  • verificați dacă timpul este sincronizat pe toate mașinile implicate.
  • dacă utilizați Microsoft AD, veți găsi ajutor suplimentar aici: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • în afară de aceasta, configurarea unui mediu adecvat Kerberos poate fi complicată și este important să obțineți acest lucru chiar înainte de a începe să utilizați extensia Spring Security Kerberos. Majoritatea problemelor pe care le întâlnim în timpul consultării sunt probleme cu mediul Kerberos și nu cu aplicația în sine.

      dacă nu doriți să utilizați extensia Spring Security Kerberos în propriul proiect Maven, trebuie să adăugați depozitul Spring Milestone la pom.xml. Ar trebui să arate astfel:

și, desigur, dependența:

există încă unele de lucru pentru a face, de exemplu, pentru a oferi, de asemenea, Kerberos pentru clienții Java și nu numai pentru server, dar sperăm că veți încerca această versiune piatră de hotar și să ofere unele feedback-ul. Forumul comunității este cel mai bun loc pentru a pune întrebări sau pentru a începe discuții cu privire la noi caracteristici. Alternativ, dacă găsiți ceva rău, puteți ridica o problemă Jira.

Lasă un răspuns

Adresa ta de email nu va fi publicată.