Udelená autorita verzus rola v jarnej bezpečnosti

1. Prehľad

V tomto rýchlom článku si vysvetlíme jemný, ale významný rozdiel medzi a Rola a a Udelená autorita na jarnej bezpečnosti. Podrobnejšie informácie o úlohách a oprávneniach nájdete v článku tu.

2. Udelená autorita

Na jar môžeme mysli na každého Udelená autorita ako individuálne privilégium. Medzi príklady patria READ_AUTHORITY, WRITE_PRIVILEGE, alebo dokonca CAN_EXECUTE_AS_ROOT. Dôležité je to pochopiť meno je ľubovoľné.

Pri použití a Udelená autorita priamo, napríklad použitím výrazu ako hasAuthority („READ_AUTHORITY“), my sme jemnozrnným spôsobom obmedziť prístup.

Ako asi tušíte, môžeme sa odvolať na koncept orgánu používaním privilégium tiež.

3. Úloha orgánu

Podobne môžeme na jarnej bezpečnosti mysli na každého Rola ako hrubozrnný Udelená autorita ktorá je reprezentovaná ako a String a s predponou „ÚLOHA. Pri použití a Rola priamo, napríklad prostredníctvom výrazu ako hasRole („ADMIN“), obmedzujeme prístup hrubozrnným spôsobom.

Stojí za zmienku, že predvolená hodnota „ROLE ” predpona je konfigurovateľná, ale vysvetlenie, ako to urobiť, presahuje rámec tohto článku.

Základným rozdielom medzi týmito dvoma je sémantika, ktorú pripájame k tomu, ako túto funkciu používame. Pre rámec je rozdiel minimálny - a v zásade s nimi zaobchádza úplne rovnako.

4. Rola ako kontajner

Teraz, keď sme videli, ako rámec využíva úlohu koncept, poďme rýchlo diskutovať aj o alternatíve - a to je používanie rol ako kontajnerov autorít / privilégií.

Toto je prístup k rolám na vyššej úrovni - čo z nich robí koncept viac zameraný na podnikanie ako na zameranie na implementáciu.

Rámec jarnej bezpečnosti neposkytuje nijaké usmernenie, pokiaľ ide o to, ako by sme mali koncept používať, takže výber je úplne špecifický pre implementáciu.

5. Jarná konfigurácia zabezpečenia

Podrobnú požiadavku na autorizáciu môžeme preukázať obmedzením prístupu k / protectedbyauthority používateľom s READ_AUTHORITY.

Obmedzením prístupu k môžeme preukázať požiadavku na hrubú autorizáciu / protectedbyrole používateľom s ROLE_USER.

Nakonfigurujme si takýto scenár v našej konfigurácii zabezpečenia:

@Override protected void configure (HttpSecurity http) vyvolá výnimku {// ... .antMatchers ("/ protectedbyrole"). HasRole ("USER") .antMatchers ("/ protectedbyauthority"). HasAuthority ("READ_PRIVILEGE") //. ..}

6. Simple Data Init

Teraz, keď lepšie rozumieme základným pojmom, poďme sa rozprávať o vytvorení niektorých údajov o nastavení pri spustení aplikácie.

Toto je samozrejme veľmi jednoduchý spôsob, ako pri vývoji naraziť na povrch s niektorými používateľmi predbežného testu - nie spôsobom, ako by ste mali narábať s dátami vo výrobe.

Budeme počúvať udalosť obnovenia kontextu:

@Override @Transactional public void onApplicationEvent (udalosť ContextRefreshedEvent) {MyPrivilege readPrivilege = createPrivilegeIfNotFound ("READ_PRIVILEGE"); MyPrivilege writePrivilege = createPrivilegeIfNotFound ("WRITE_PRIVILEGE"); }

Na skutočnej implementácii tu skutočne nezáleží - a vo všeobecnosti závisí od riešenia perzistencie, ktoré používate. Hlavné je - trváme na autoritách, ktoré používame v kóde.

7. UserDetailsService

Naša implementácia UserDetailsService je miesto, kde sa vykonáva mapovanie autorít. Akonáhle sa užívateľ autentifikuje, náš getAuthorities () metóda vyplní a vráti a UserDetails objekt:

súkromná zbierka getAuthorities (roly zbierky) {List Authority = new ArrayList (); pre (Rola roly: role) {Authority.add (new SimpleGrantedAuthority (role.getName ())); role.getPrivileges (). stream () .map (p -> nový SimpleGrantedAuthority (p.getName ())) .forEach (autority :: pridať); } návratové orgány; }

8. Spustenie a testovanie príkladu

Môžeme vykonať príklad RolyAuthoritiesApplication Aplikácia Java, ktorá sa nachádza v projekte GitHub.

Ak chcete vidieť autorizáciu založenú na rolách v akcii, musíme:

  • Prístup // localhost: 8082 / protectedbyrole
  • Overiť ako [chránené e-mailom] (heslo je „Užívateľ“)
  • Poznamenajte si úspešnú autorizáciu
  • Prístup // localhost: 8082 / protectedbyauthority
  • Poznámka: neúspešná autorizácia

Ak chcete vidieť autorizáciu založenú na autoritách v akcii, musíme sa odhlásiť z aplikácie a potom:

  • Prístup // localhost: 8082 / protectedbyauthority
  • Overiť ako [chránený e-mailom] / správca
  • Poznamenajte si úspešnú autorizáciu
  • Prístup // localhsot: 8082 / protectedbyrole
  • Poznámka: neúspešná autorizácia

9. Záver

V tomto rýchlom návode sme sa pozreli na jemný, ale významný rozdiel medzi a Rola a a Udelená autorita na jarnej bezpečnosti.


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