En introduksjon til Spring Cloud Security

1. Oversikt

Spring Cloud Security-modulen inneholder funksjoner relatert til tokenbasert sikkerhet i Spring Boot-applikasjoner.

Spesielt gjør det OAuth2-basert SSO enklere - med støtte for videreformidling av tokens mellom ressursservere, samt konfigurering av nedstrømsgodkjenning ved hjelp av en innebygd Zuul-proxy.

I denne raske artikkelen vil vi se på hvordan vi kan konfigurere disse funksjonene ved hjelp av et Spring Boot-klientprogram, en autorisasjonsserver og et REST API som fungerer som en ressursserver.

Merk at for dette eksemplet har vi bare ett klientprogram som bruker SSO for å demonstrere skyens sikkerhetsfunksjoner - men i et typisk scenario vil vi ha minst to klientprogrammer for å rettferdiggjøre behovet for enkel pålogging.

2. Raskt starte en Cloud Security-app

La oss starte med konfigurere SSO i en Spring Boot-applikasjon.

Først må vi legge til vår-sky-start-oauth2 avhengighet:

 org.springframework.cloud spring-cloud-starter-oauth2 2.2.2.RELEASE 

Dette vil også bringe inn vår-sky-start-sikkerhet avhengighet.

Vi kan konfigurere ethvert sosialt nettsted som en Auth-server for nettstedet vårt, eller vi kan bruke vår egen server. I vårt tilfelle har vi valgt sistnevnte alternativ og konfigurert et program som fungerer som en autorisasjonsserver - som distribueres lokalt på // localhost: 7070 / authserver.

Autorisasjonsserveren vår bruker JWT-tokens.

I tillegg, for at enhver klient skal kunne hente legitimasjonen til en bruker, må vi konfigurere ressursserveren vår, som kjører på port 9000, med et sluttpunkt som kan tjene disse legitimasjonene.

Her har vi konfigurert en /bruker endepunkt som er tilgjengelig på // localhost: 9000 / bruker.

For mer informasjon om hvordan du setter opp en autorisasjonsserver og en ressursserver, kan du se vår forrige artikkel her.

Vi kan nå legge til merknaden i en konfigurasjonsklasse i klientapplikasjonen:

@Configuration @ EnableOAuth2Sso offentlig klasse SiteSecurityConfigurer utvider WebSecurityConfigurerAdapter {@Override-beskyttet ugyldig konfigurering (HttpSecurity http) kaster unntak {// ...}}

Eventuelle forespørsler som krever godkjenning vil bli omdirigert til autorisasjonsserveren. For at dette skal fungere, må vi også definere serveregenskapene:

sikkerhet: oauth2: klient: accessTokenUri: // localhost: 7070 / authserver / oauth / token brukerAuthorizationUri: // localhost: 7070 / authserver / oauth / authorize clientId: authserver clientSecret: passwordforauthserver resource: userInfoUri: // localhost: 9000 / user

Merk at vi trenger å ha vår-boot-starter-sikkerhet i klassestien vår for å finne konfigurasjonen ovenfor som fungerer.

3. Videresende tilgangstokener

Mens du videresender et token, videresender en OAuth2-klient OAuth2-tokenet som den mottas til en utgående ressursforespørsel.

Siden vi har erklært @ EnableOauth2Sso kommentar, Spring Boot legger til en OAuth2ClientContext bønne i forespørselens omfang. Basert på dette kan vi lage våre egne OAuth2RestTemplate i vår klientapplikasjon:

@Bean public OAuth2RestOperations restOperations (OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context) {return new OAuth2RestTemplate (resource, context); }

Når vi har konfigurert bønnen, konteksten videresender tilgangstokenet til de forespurte tjenestene og vil også oppdatere tokenet hvis det utløper.

4. Videresende et OAuth-token ved hjelp av RestTemplate

Vi har tidligere definert en hvile Operasjoner bønne av typen OAuth2RestTemplate i vår klientapplikasjon. Som et resultat, vi kan bruke getForObject () Metode av OAuth2RestTemplate å sende en forespørsel med nødvendige tokens til en beskyttet ressursserver fra vår klient.

La oss først definere et sluttpunkt som krever godkjenning i vår ressursserver:

@GetMapping ("/ person") @PreAuthorize ("hasAnyRole ('ADMIN', 'USER')") public @ResponseBody Person personInfo () {return new Person ("abir", "Dhaka", "Bangladesh", 29, "Mann"); } 

Dette er et enkelt REST-sluttpunkt som returnerer en JSON-representasjon av en Person gjenstand.

Nå, vi kan sende en forespørsel fra klientprogrammet ved hjelp av getForObject () metode som vil viderebringe tokenet til ressursserveren:

@Autowired private RestOperations restOperations; @GetMapping ("/ personInfo") offentlig ModelAndView person () {ModelAndView mav = ny ModelAndView ("personinfo"); String personResourceUrl = "// localhost: 9000 / person"; mav.addObject ("person", restOperations.getForObject (personResourceUrl, String.class)); retur mav; }

5. Konfigurere Zuul for Token Relay

Hvis vi ønsker å videreformidle et token nedstrøms til proxy-tjenestene, kan vi bruke Spring Cloud Zuul Embedded Reverse Proxy.

Først må vi legge til Maven-avhengigheten for å jobbe med Zuul:

 org.springframework.cloud spring-cloud-starter-netflix-zuul 

Deretter må vi legge til @AktiverZuulProxy kommentar til vår konfigurasjonsklasse i klientapplikasjonen:

@Configuration @ EnableOAuth2Sso @EnableZuulProxy offentlig klasse SiteSecurityConfigurer utvider WebSecurityConfigurerAdapter {// ...}

Alt som er igjen å gjøre er å legge til Zuul-konfigurasjonsegenskapene i vår application.yml fil:

zuul: sensitiveHeaders: Cookie, Set-Cookie routes: resource: path: / api / ** url: // localhost: 9000 user: path: / user / ** url: // localhost: 9000 / user

Enhver forespørsel som kommer til /api sluttpunktet til klientapplikasjonen vil bli omdirigert til URL-en for ressursserveren. Vi må også oppgi URL-en til brukerpåloggingsendepunktet.

6. Konklusjon

I denne raske artikkelen undersøkte vi hvordan du bruker Spring Cloud Security med OAuth2 og Zuul for å konfigurere sikre autorisasjons- og ressursservere, samt hvordan du videreformidler OAuth2-tokens mellom servere ved hjelp av Oauth2RestTemplate og Embedded Zuul Proxy.

Som alltid er koden tilgjengelig på GitHub.


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