Innvilget myndighet motsatt rolle i vårsikkerhet

1. Oversikt

I denne raske artikkelen forklarer vi den subtile men betydningsfulle forskjellen mellom a Roll og en Gitt autoritet i vårsikkerhet. For mer detaljert informasjon om roller og myndigheter, se artikkelen her.

2. Gitt autoritet

I vårsikkerhet kan vi tenk på hver Gitt autoritet som et individuelt privilegium. Eksempler kan inkludere LES_AUTHORITET, WRITE_PRIVILEGE, eller CAN_EXECUTE_AS_ROOT. Det viktige å forstå er at navnet er vilkårlig.

Når du bruker en Gitt autoritet direkte, for eksempel gjennom bruk av et uttrykk som hasAuthority (‘READ_AUTHORITY '), vi er begrense tilgangen på en finkornet måte.

Som du sikkert kan samle, kan vi referere til begrepet autoritet ved bruk av privilegium også.

3. Roll som autoritet

På samme måte kan vi i vårsikkerhet tenk på hver Roll som en grovkornet Gitt autoritet som er representert som en String og prefikset med “ROLLE. Når du bruker en Roll direkte, for eksempel gjennom et uttrykk som hasRole (“ADMIN”), begrenser vi tilgangen på en grovkornet måte.

Det er verdt å merke seg at standard “ROLLE ” prefikset kan konfigureres, men å forklare hvordan du gjør det ligger utenfor omfanget av denne artikkelen.

Kjerneforskjellen mellom disse to er semantikken vi legger til hvordan vi bruker funksjonen. For rammeverket er forskjellen minimal - og den takler i utgangspunktet disse på nøyaktig samme måte.

4. Roll som beholder

Nå som vi har sett hvordan rammeverket bruker rolle konsept, la oss også raskt diskutere et alternativ - og det er bruker roller som beholder av autoriteter / privilegier.

Dette er en høyere tilnærming til roller - noe som gjør dem til et mer forretningsmessig konsept snarere enn et implementeringssentrisk.

Spring Security-rammeverket gir ingen veiledning når det gjelder hvordan vi skal bruke konseptet, så valget er helt implementeringsspesifikt.

5. Vårens sikkerhetskonfigurasjon

Vi kan demonstrere et finkornet autorisasjonskrav ved å begrense tilgangen til / beskyttet av autoritet til brukere med LES_AUTHORITET.

Vi kan demonstrere et grovkornet autorisasjonskrav ved å begrense tilgangen til / protectedbyrole til brukere med ROLE_USER.

La oss konfigurere et slikt scenario i vår sikkerhetskonfigurasjon:

@ Override beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster unntak {// ... .antMatchers ("/ protectedbyrole"). HasRole ("USER") .antMatchers ("/ protectedbyauthority"). HasAuthority ("READ_PRIVILEGE") //. ..}

6. Enkel datainit

Nå som vi forstår kjernekonseptene bedre, la oss snakke om å lage noen oppsettdata når applikasjonen starter opp.

Dette er selvfølgelig en veldig enkel måte å gjøre det på, for å slå bakken med noen foreløpige testbrukere under utviklingen - ikke slik du skal håndtere data i produksjonen.

Vi skal lytte til kontekstoppdateringshendelsen:

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

Den faktiske implementeringen her spiller ingen rolle - og avhenger generelt av utholdenhetsløsningen du bruker. Hovedpoenget er - vi vedvarer myndighetene vi bruker i koden.

7. UserDetailsService

Vår implementering av UserDetailsService er der myndighetskartleggingen finner sted. Når brukeren har godkjent, vår getAuthorities () metoden fyller ut og returnerer a UserDetails gjenstand:

privat samling getAuthorities (Samlingsroller) {Liste autoriteter = ny ArrayList (); for (Rollerolle: roller) {autoriteter.add (ny SimpleGrantedAuthority (role.getName ())); role.getPrivileges (). stream () .map (p -> new SimpleGrantedAuthority (p.getName ())) .forEach (autoriteter :: legg til); } returmyndigheter; }

8. Kjøre og teste eksemplet

Vi kan utføre eksemplet RollerAuthoritiesApplication Java-applikasjon, funnet i GitHub-prosjektet.

For å se den rollebaserte autorisasjonen i aksjon, må vi:

  • Tilgang // localhost: 8082 / protectedbyrole
  • Autentiser som [e-postbeskyttet] (passord er "bruker")
  • Legg merke til vellykket autorisasjon
  • Tilgang // localhost: 8082 / protectedbyauthority
  • Merk mislykket autorisasjon

For å se autoritetsbasert autorisasjon i aksjon, må vi logge ut av applikasjonen og deretter:

  • Tilgang // localhost: 8082 / protectedbyauthority
  • Autentiser som [e-postbeskyttet] / admin
  • Legg merke til vellykket autorisasjon
  • Tilgang // localhsot: 8082 / protectedbyrole
  • Merk mislykket autorisasjon

9. Konklusjon

I denne raske opplæringen så vi på den subtile, men signifikante forskjellen mellom a Roll og en Gitt autoritet i vårsikkerhet.


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