En introduktion til Spring Cloud Security

1. Oversigt

Spring Cloud Security-modulet indeholder funktioner relateret til tokenbaseret sikkerhed i Spring Boot-applikationer.

Specifikt gør det OAuth2-baseret SSO lettere - med understøttelse af videresendelse af tokens mellem ressource-servere samt konfiguration af downstream-godkendelse ved hjælp af en indlejret Zuul-proxy.

I denne hurtige artikel vil vi se på, hvordan vi kan konfigurere disse funktioner ved hjælp af et Spring Boot-klientprogram, en autorisationsserver og en REST API, der fungerer som en ressource-server.

Bemærk, at vi i dette eksempel kun har en klientapplikation, der bruger SSO til at demonstrere skyens sikkerhedsfunktioner - men i et typisk scenario ville vi have mindst to klientapplikationer for at retfærdiggøre behovet for Single Sign-On.

2. Start en Cloud Security-app hurtig

Lad os starte med konfiguration af SSO i en Spring Boot-applikation.

Først skal vi tilføje spring-cloud-starter-oauth2 afhængighed:

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

Dette vil også bringe i spring-cloud-starter-sikkerhed afhængighed.

Vi kan konfigurere ethvert socialt sted som en Auth-server til vores websted, eller vi kan bruge vores egen server. I vores tilfælde har vi valgt sidstnævnte mulighed og konfigureret en applikation, der fungerer som en autorisationsserver - som distribueres lokalt på // localhost: 7070 / authserver.

Vores autorisationsserver bruger JWT-tokens.

Derudover, for at enhver klient skal kunne hente legitimationsoplysninger for en bruger, er vi nødt til at konfigurere vores ressource-server, der kører på port 9000, med et slutpunkt, der kan tjene disse legitimationsoplysninger.

Her har vi konfigureret en /bruger slutpunkt, der er tilgængeligt på // localhost: 9000 / bruger.

For at få flere oplysninger om, hvordan du opretter en autorisationsserver og en ressource-server, se vores forrige artikel her.

Vi kan nu tilføje kommentaren i en konfigurationsklasse i vores klientapplikation:

@Configuration @ EnableOAuth2Sso offentlig klasse SiteSecurityConfigurer udvider WebSecurityConfigurerAdapter {@Override beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {// ...}}

Alle anmodninger, der kræver godkendelse, omdirigeres til autorisationsserveren. For at dette skal fungere, skal vi også definere serveregenskaberne:

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

Bemærk, at vi skal have spring-boot-starter-sikkerhed i vores klassesti for at finde ovenstående konfiguration fungerer.

3. Videresendelse af adgangstokens

Under videresendelse af et token videresender en OAuth2-klient det OAuth2-token, der modtages af det, til en udgående ressourceanmodning.

Siden vi har erklæret @ EnableOauth2Sso kommentar, Spring Boot tilføjer en OAuth2ClientContext bønne i anmodningens omfang. Baseret på dette kan vi skabe vores egne OAuth2RestTemplate i vores klientapplikation:

@Bean public OAuth2RestOperations restOperations (OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context) {returner ny OAuth2RestTemplate (ressource, kontekst); }

Når vi først har konfigureret bønnen, konteksten videresender adgangstokenet til de anmodede tjenester og opdaterer også tokenet, hvis det udløber.

4. Videresendelse af et OAuth-token ved hjælp af RestTemplate

Vi har tidligere defineret en hvile Operationer bønne af typen OAuth2RestTemplate i vores klientapplikation. Som resultat, vi kan bruge getForObject () metode til OAuth2RestTemplate at sende en anmodning med de nødvendige tokens til en beskyttet ressource server fra vores klient.

Lad os først definere et slutpunkt, der kræver godkendelse i vores ressource server:

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

Dette er et simpelt REST-slutpunkt, der returnerer en JSON-repræsentation af en Person objekt.

Nu, vi kan sende en anmodning fra klientapplikationen ved hjælp af getForObject () metode, der videresender tokenet til ressource-serveren:

@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)); returnere mav; }

5. Konfiguration af Zuul til Token Relay

Hvis vi gerne vil viderebringe et token nedstrøms til proxytjenesterne, kan vi bruge Spring Cloud Zuul Embedded Reverse Proxy.

Først skal vi tilføje Maven-afhængighed for at arbejde med Zuul:

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

Derefter skal vi tilføje @AktivérZuulProxy kommentar til vores konfigurationsklasse i klientapplikationen:

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

Alt, hvad der er tilbage at gøre, er at tilføje Zuul-konfigurationsegenskaberne til vores ansøgning.yml fil:

zuul: sensitiveHeaders: Cookie, Set-Cookie ruter: ressource: sti: / api / ** url: // localhost: 9000 bruger: sti: / user / ** url: // localhost: 9000 / user

Enhver anmodning, der kommer til /api slutpunktet for klientapplikationen omdirigeres til ressource-serverens URL. Vi er også nødt til at angive URL'en til brugerens legitimationsoplysninger slutpunkt.

6. Konklusion

I denne hurtige artikel undersøgte vi, hvordan vi bruger Spring Cloud Security med OAuth2 og Zuul til at konfigurere sikre autorisations- og ressource-servere, samt hvordan man videreformidler OAuth2-tokens mellem servere ved hjælp af Oauth2RestTemplate og Embedded Zuul Proxy.

Som altid er koden tilgængelig på GitHub.


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