Programmēšana

Viss tas JAAS

Vai jums kādreiz ir nepieciešams izveidot pieteikšanās autentifikācijas mehānismu lietojumprogrammai? Ir izredzes, ka jums ir, un, iespējams, vairāk nekā vienu reizi, kad katra jaunā ieviešana ir tuvu, bet nav identiska iepriekšējai. Piemēram, vienā ieviešanā var izmantot Oracle datu bāzi, citā - NT autentifikāciju, bet citā - LDAP (vieglā piekļuves direktorija protokola) direktoriju. Vai nebūtu jauki atbalstīt visus šos drošības mehānismus, nemainot nevienu lietojumprogrammas līmeņa kodu?

Tagad Java pasaulē jūs varat to izmantot, izmantojot Java autentifikācijas un autorizācijas pakalpojumu (JAAS). Šī salīdzinoši jaunā API bija J2SE (Java 2 Platform, Standard Edition) 1.3 paplašinājums, tā ir galvenā J2SE 1.4 API un ir arī daļa no J2EE (Java 2 Platform, Enterprise Edition) 1.3 specifikācijas. Šajā rakstā mēs iemācīsim jums JAAS pamatinformāciju un parādīsim, kā efektīvi pielietot JAAS reālās lietojumprogrammās. Šī raksta lietojumprogramma tika balstīta uz mūsu pašu pieredzi, integrējot JAAS esošajā Java tīmekļa sistēmā, kurā lietotāja pieteikšanās informācijas glabāšanai tika izmantota RDBMS (relāciju datu bāzes pārvaldības sistēma). Izmantojot JAAS, mēs izstrādājām stabilākus, elastīgākus un konsekventākus pieteikšanās un autentifikācijas mehānismus.

Pilnu darba piemēru komplektu varat lejupielādēt no zemāk esošajiem resursiem (iekļaujot Java avotus, JSP (JavaServer Pages), JAAS konfigurāciju ar datu bāzēm un skriptiem). Mēs pārbaudījām šos piemērus, izmantojot Resin serveri ar JDBC (Java Database Connectivity) un MySQL datu bāzi.

Java autentifikācija un autorizācija: kopaina

Pirms JAAS Java drošības modeli galvenokārt veidoja tā izcelsme kā platformas neatkarīga valoda izplatītām, tīklā esošām lietojumprogrammām. Pirmajās dienās Java bieži parādījās kā mobilais kods, piemēram, pārlūkprogrammas sīklietotnes, un tāpēc sākotnējais drošības modelis bija vērsts uz lietotāju aizsardzību, pamatojoties uz kur kods radies un kas to izveidoja. Agrīni Java drošības mehānismi, piemēram, SecurityManagers, smilškastes koncepcija, koda parakstīšana un politikas faili bija domāti, lai aizsargātu lietotājus no sistēmas.

JAAS izgudrojums atspoguļo Java attīstību vispārējas nozīmes programmēšanas valodā, ko izmanto tradicionālo klientu un serveru lietojumprogrammu ieviešanai, kurām nepieciešama pieteikšanās un piekļuves kontrole. JAAS aizsargā sistēmu no lietotājiem, atļaujot vai liedzot piekļuvi, pamatojoties uz kas vai kas vada programmu. Lai gan JAAS var veikt gan autentifikāciju, gan autorizāciju, šajā rakstā mēs galvenokārt koncentrējamies uz autentifikāciju.

JAAS var vienkāršot Java drošības izstrādi, ievietojot abstrakcijas slāni starp jūsu lietojumprogrammu un atšķirīgiem pamatā esošajiem autentifikācijas un autorizācijas mehānismiem. Šī neatkarība no platformām un algoritmiem ļauj izmantot dažādus drošības mehānismus, nemainot lietojumprogrammas līmeņa kodu. Tāpat kā lielākajai daļai Java drošības API, arī JAAS šo ieviešanas neatkarību sasniedz, izmantojot paplašināmu pakalpojumu sniedzēju saskarņu (SPI) paplašināmu sistēmu: abstraktu klašu un saskarņu kopumu, kuriem tiek izstrādātas īpašas ieviešanas iespējas.

1. attēlā sniegts augsta līmeņa pārskats par to, kā JAAS sasniedz šo spraudni. Jūsu lietojumprogrammas slāņa kods galvenokārt attiecas uz a LoginContext. Zem tā LoginContext ir viena vai vairāku dinamiski konfigurētu kopa Pieteikšanās moduliss, kas apstrādā faktisko autentifikāciju, izmantojot atbilstošu drošības infrastruktūru.

JAAS sniedz zināmu atsauci Pieteikšanās modulis ieviešana, piemēram, JndiLoginModule; jūs varat arī izveidot savu, kā mēs šeit darīsim ar RdbmsLoginModule. Mēs arī parādīsim, kā jūs varat ātri iestatīt lietojumprogrammu, izvēloties ieviešanu, izmantojot vienkāršu konfigurācijas failu.

Papildus tam, ka JAAS ir iespraužams, tas ir sakraujams: vienas pieteikšanās kontekstā drošības moduļu komplekts var sakraut viens uz otra, katrs tiek saukts kārtībā un katrs mijiedarbojas ar atšķirīgu drošības infrastruktūru.

JAAS aspekti tiek veidoti pēc dažiem pazīstamiem drošības arhitektūras modeļiem un esošajiem ietvariem. Piemēram, sakraujamā funkcija apzināti atgādina Unix Pluggable Authentication Module (PAM) sistēmu. No darījumu viedokļa JAAS pieņem uzvedību, kas līdzīga divfāzu saistību (2PC) protokoliem. JAAS drošības konfigurācijas koncepcijas, ieskaitot Politika faili un Atļaujas, nāk no J2SE 1.2 drošības pakotnēm. JAAS arī aizņemas idejas no citiem izveidotiem drošības ietvariem, piemēram, X.509 sertifikātiem, no kuriem nosaukums Priekšmets ir atvasināts (jūs uzzināsiet vairāk par Priekšmets vēlāk).

Piezīme: JAAS ir tikai viens no vairākiem jaunajiem Java drošības API. Lai uzzinātu vairāk par Java drošību, skatiet sānjoslu "Java drošības mīkla" un resursus zemāk.

Klienta un servera puses JAAS

Jūs varat lietot JAAS gan klientā, gan serverī. Tā lietošana klienta pusē ir vienkārša, kā mēs to drīz parādīsim. Servera pusē lietas kļūst nedaudz sarežģītākas. Pašlaik JAAS lietojumprogrammu serveru tirgū ir nedaudz nekonsekventa; J2EE lietotņu serveri JAAS izmanto nedaudz atšķirīgi, atkarībā no tā, kuru izmantojat. Piemēram, JBossSX, izmantojot savu arhitektūru, lieliski integrē JAAS savā vispārējā drošības sistēmā (kas ir sīki aprakstīts Skota Stārka izcilajā JavaWorld raksts "Drošības infrastruktūras integrēšana ar JBossSX" (2001. gada augusts)). Lai gan WebLogic 6.x atbalsta JAAS, informācija atšķiras.

Tātad jūs varat saprast JAAS gan no servera, gan no klienta puses, šajā rakstā mēs parādīsim abu piemērus. Un servera vienkāršības labad mēs izmantosim Resin lietojumprogrammu serveri, lai mēs varētu sākt ar tīrāku šīferi (sveķiem patiešām ir sava pievienojama autentifikācijas shēma, taču tā ir nestandarta, tāpēc JAAS izmantošana dod mums lielāku pārnesamību iespējas vēlāk).

JAAS kodols

Lai sāktu darbu ar JAAS, vispirms jāpārliecinās, ka tā ir instalēta. J2SE 1.4 jau ietver JAAS; J2SE 1.3 nav. Ja vēlaties turpināt izmantot J2SE 1.3, lejupielādējiet JAAS no Sun Microsystems. Kad esat lejupielādējis un instalējis JAAS noteiktā direktorijā, jūs redzēsiet apakšdirektoriju ar nosaukumu lib, kurā ir viens nosaukums ar nosaukumu jaas.jar. Šis fails būs jāpievieno klases ceļā vai jākopē JRE (Java Runtime Environment) paplašinājumu direktorijā ( \ lib \ ext, kur ir jūsu JRE atrašanās vieta). Pēc tam jūs esat gatavs JAAS. Piezīme: Ja izmantojat lietojumprogrammu serveri, tajā jau var būt JAAS. Sīkāku informāciju skatiet sava servera dokumentācijā.

Izmantojot jebkuru no šīm pieejām, ņemiet vērā, ka Java drošības īpašību failā varat mainīt dažus ar JAAS saistītos sistēmas rekvizītu iestatījumus (kā arī daudzus citus Java drošības iestatījumus). Šis fails, java.security, atrodas / lib / security direktorijā un rakstīts Java īpašību standarta faila formātā.

JAAS autentifikācijas izmantošana no jūsu lietojumprogrammas parasti ietver šādas darbības:

  1. Izveidojiet a LoginContext
  2. Pēc izvēles nokārtot a Atzvana uz LoginContext, autentifikācijas datu vākšanai vai apstrādei
  3. Veiciet autentifikāciju, zvanot uz LoginContext's Pieslēgties() metodi
  4. Veiciet priviliģētas darbības, izmantojot atgriezto Priekšmets (pieņemot, ka pieteikšanās ir veiksmīga)

Šeit ir minimāls piemērs:

 LoginContext lc = jauns LoginContext ("MyExample"); mēģiniet {lc.login (); } catch (LoginException) {// autentifikācija neizdevās. } // Autentifikācija ir veiksmīga, tagad mēs varam turpināt. // Ja vēlaties, mēs varam izmantot atgriezto Tēmu. Subject sub = lc.getSubject (); Subject.doAs (sub, new MyPrivilegedAction ()); 

Zem vākiem notiek dažas citas lietas:

  1. Inicializācijas laikā LoginContext atrod konfigurācijas ierakstu "MyExample" JAAS konfigurācijas failā (kuru konfigurējāt), lai noteiktu, kurš LoginModules, lai ielādētu (sk. 2. attēlu)
  2. Pieteikšanās laikā LoginContext zvana katram LoginModule's Pieslēgties() metodi
  3. Katrs Pieslēgties() metode veic autentifikāciju vai piesaista a Atzvana
  4. The Atzvana izmanto vienu vai vairākus Atzvanis, lai mijiedarbotos ar lietotāju un apkopotu ievaddatus
  5. Jauns Priekšmets instancē tiek aizpildīta autentifikācijas informācija, piemēram, Direktorss un akreditācijas dati

Tālāk mēs paskaidrosim sīkāku informāciju, bet, lai sāktu, apskatīsim galvenās JAAS klases un saskarnes, kas iesaistītas šajā procesā. Parasti tās iedala šādās trīs grupās:

1. tabula. JAAS klases un saskarnes

BiežiPriekšmets, Direktors, akreditācijas dati (akreditācijas dati nav neviena konkrēta klase, bet var būt jebkurš objekts)
AutentifikācijaLoginContext, LoginModule, Atzvana, Atzvani
AtļaujaPolitika, AuthPermission, PrivateCredentialPermission

Lielākā daļa no šīm klasēm un saskarnēm ir javax.security.auth pakotnes apakšpaketes, ar dažiem iepriekš sagatavotiem ieviešanas veidiem com.sun.security.auth pakete, kas iekļauta tikai J2SE 1.4.

Piezīme: Tā kā šajā rakstā mēs koncentrējamies uz autentifikāciju, mēs neiedziļināmies autorizācijas klasēs.

Bieži: priekšmeti, galvenie un akreditācijas dati

The Priekšmets klase apzīmē autentificētu entītiju: galalietotāju vai administratoru, vai tīmekļa pakalpojumu, ierīci vai citu procesu. Klasē ir trīs drošības informācijas veidu komplekti:

  • Identitātes: Viena vai vairāku veidā Direktorss
  • Publiski akreditācijas dati: Piemēram, vārds vai publiskās atslēgas
  • Privātie akreditācijas dati: Tāpat kā paroles vai privātās atslēgas

Direktorss pārstāv Priekšmets identitātes. Viņi īsteno java.security.Principal interfeiss (kas ir bijis pirms JAAS) un java.io.Serializējams. A Priekšmetsvissvarīgākā metode ir getName (), kas atgriež identitātes virknes nosaukumu. Tā kā a Priekšmets instancē ir masīvs Direktorss, tādējādi tam var būt vairāki nosaukumi. Tā kā sociālā nodrošinājuma numurs, pieteikšanās ID, e-pasta adrese un tā tālāk visi var attēlot vienu lietotāju, reālajā pasaulē vairākas identitātes izrādās izplatītas.

Šeit pēdējais elements - akreditācijas dati - nav klase vai saskarne, bet tas var būt jebkurš objekts. Akreditācijas dati var ietvert jebkuru autentifikācijas artefaktu, piemēram, biļeti, atslēgu vai paroli, kas varētu būt nepieciešama īpašām drošības sistēmām. The Priekšmets klase uztur unikālu Iestatietprivāto un publisko akreditācijas datu kopas, kuras var iegūt, izmantojot tādas metodes kā getPrivateCredentials () un getPublicCrendentials (). Šīs metodes drošības apakšsistēmas izmanto biežāk nekā lietojuma slānī.

Autentifikācija: LoginContext

Jūsu lietojumprogrammas slānis izmanto LoginContext kā primāro klasi autentifikācijai Priekšmetss. LoginContext apzīmē arī to, kur parādās JAAS dinamiskā iespraužamība, jo, konstruējot a LoginContext, norādiet ielādējamo konfigurāciju. The LoginContext parasti ielādē konfigurācijas informāciju no teksta faila, kas savukārt stāsta LoginContext kas Pieteikšanās moduliss, ko izmantot pieteikšanās laikā.

Trīs parasti izmantotās metodes LoginContext ir:

2. tabula. LoginContext metodes

Pieslēgties()Veic pieteikšanos - samērā sarežģītu darbību, kas izsauc visus LoginModules, kas norādītas šai konfigurācijai. Ja tas izdodas, tas izveido autentificētu Priekšmets. Ja tas neizdodas, tas iemet a LoginException.
getSubject ()Atgriež autentificēto Priekšmets.
izlogoties()Atstāj autentificēto Priekšmets un noņem tās Direktorss un akreditācijas dati.

Mēs vēlāk parādīsim, kā izmantot šīs metodes.

Autentifikācija: LoginModule

Pieteikšanās modulis ir saskarne ar noteiktiem autentifikācijas mehānismiem. J2SE 1.4 tiek piegādāts ar lietošanai gatavu komplektu Pieteikšanās moduļi, ieskaitot:

3. tabula. Pieteikšanās moduļi J2SE 1.4

JndiLoginModulePārbauda direktoriju pakalpojumu, kas konfigurēts zem JNDI (Java nosaukšana un direktoriju saskarne)
Krb5LoginModuleAutentificē, izmantojot Kerberos protokolus
NTLoginModuleAutentifikācijai izmanto pašreizējā lietotāja NT drošības informāciju
UnixLoginModuleAutentifikācijai izmanto pašreizējā lietotāja Unix drošības informāciju

Kopā ar šiem moduļiem nāk atbilstoša betona komplekts Direktors ieviešana com.sun.security.auth pakete, piemēram, NTDomainPrincipal un UnixPrincipal.

The Pieteikšanās modulis interfeisam ir piecas metodes:

4. tabula. LoginModule metodes

palaist()Zvanīja pēc LoginModule ir konstruēts.
Pieslēgties()Veic autentifikāciju.
apņemties ()Piezvanīja LoginContext pēc tam, kad tā ir pieņēmusi rezultātus no visiem LoginModules šim lietojumam. Mēs piešķiram Direktorss un akreditācijas raksti Priekšmets šeit.
pārtraukt ()Zvanīja, kad tādi ir Pieteikšanās modulis šai lietojumprogrammai neizdodas (pat ja iepriekšējās secīgi, iespējams, ir izdevušās - līdzīgas 2PC modelim). Nē Direktorss vai akreditācijas dati tiek piešķirti Priekšmets.
izlogoties()Noņem Direktorss un akreditācijas dati, kas saistīti ar Priekšmets.

Lietojumprogrammas slānis nevienu no šīm metodēm tieši neizsauc - LoginContext pēc vajadzības tos izsauc. Zemāk sniegtajā piemērā tiks detalizēti aprakstīta šo metožu ieviešana.

Autentifikācija: CallbackHandlers un Callback

Atzvanasmiltis Atzvanis ļauj a Pieteikšanās modulis apkopot nepieciešamo autentifikācijas informāciju no lietotāja vai sistēmas, vienlaikus paliekot neatkarīgi no faktiskā mijiedarbības mehānisma. Mēs izmantosim šo iespēju mūsu dizainā - mūsu RdbmsLoginModule nav atkarīgs no tā, kā tiek iegūti lietotāja akreditācijas dati (lietotājvārds / parole), un tādējādi tos var izmantot dažādās piemērošanas vidēs, kuras mēs ilustrēsim (vai nu no komandrindas, vai no JSP).

$config[zx-auto] not found$config[zx-overlay] not found