Bevezetés a Spring Cloud Security-be

1. Áttekintés

A Spring Cloud Security modul a token alapú biztonsággal kapcsolatos szolgáltatásokat nyújt a Spring Boot alkalmazásokban.

Különösen megkönnyíti az OAuth2-alapú egyszeri bejelentkezést - támogatva a tokenek továbbítását az erőforrás-kiszolgálók között, valamint konfigurálva a downstream hitelesítést egy beágyazott Zuul-proxy használatával.

Ebben a rövid cikkben megnézzük, hogyan konfigurálhatjuk ezeket a szolgáltatásokat egy Spring Boot ügyfélalkalmazás, egy Authorization Server és egy REST API segítségével, amelyek erőforrás-kiszolgálóként működnek.

Ne feledje, hogy ebben a példában csak egy ügyfélalkalmazásunk van, amely SSO-t használ a felhő biztonsági funkcióinak bemutatására - de egy tipikus esetben legalább két ügyfélalkalmazással rendelkeznénk az egyszeri bejelentkezés szükségességének igazolására.

2. Gyors indítás a Cloud Security alkalmazáshoz

Kezdjük azzal SSO konfigurálása Spring Boot alkalmazásban.

Először hozzá kell adnunk a tavasz-felhő-kezdő-oauth2 függőség:

 org.springframework.cloud spring-cloud-starter-oauth2 2.2.2. KÖZLEMÉNY 

Ez be fogja hozni a tavasz-felhő-indító-biztonság függőség.

Bármely közösségi oldalt beállíthatunk Auth szerverként a webhelyünkhöz, vagy használhatjuk saját szerverünket. Esetünkben ez utóbbi lehetőséget választottuk, és konfiguráltunk egy olyan alkalmazást, amely Authorization Server-ként működik - amelyet helyben telepítenek a // localhost: 7070 / authserver.

Engedélyezési szerverünk JWT tokent használ.

Ezenkívül ahhoz, hogy bármely kliens képes legyen lekérni a felhasználó hitelesítő adatait, konfigurálnunk kell a 9000-es porton futó erőforrás-kiszolgálónkat egy olyan végponttal, amely ezeket a hitelesítő adatokat kiszolgálja.

Itt konfiguráltuk a /felhasználó címen elérhető végpont // localhost: 9000 / user.

Az Engedélyezési kiszolgáló és az Erőforrás-kiszolgáló beállításával kapcsolatos további részletekért tekintse meg előző cikkünket itt.

Most hozzáadhatjuk a jegyzetet egy konfigurációs osztályba az ügyfélalkalmazásban:

@Configuration @ EnableOAuth2Sso public class A SiteSecurityConfigurer kiterjeszti a WebSecurityConfigurerAdapter {@Orride protected void configure (HttpSecurity http) dobja a Kivételt {// ...}}

Minden hitelesítést igénylő kérést átirányítunk az Authorization Server-re. Ahhoz, hogy ez működjön, meg kell határoznunk a kiszolgáló tulajdonságait is:

biztonság: oauth2: kliens: accessTokenUri: // localhost: 7070 / authserver / oauth / token userAuthorizationUri: // localhost: 7070 / authserver / oauth / authorize clientId: authserver clientSecret: passwordforauthserver erőforrás: userInfoUri: // localhost: 9000

Ne feledje, hogy meg kell spring-boot-starter-security osztályúton, hogy a fenti konfiguráció működőképes legyen.

3. Hozzáférési tokenek továbbítása

Token továbbítása közben az OAuth2 ügyfél továbbítja az általa kapott OAuth2 tokent egy kimenő erőforrás-kérelemhez.

Mivel kijelentettük a @ EnableOauth2Sso annotáció, a Spring Boot hozzáad egy OAuth2ClientContext bab a kérelem hatókörében. Ennek alapján létrehozhatjuk a sajátunkat OAuth2RestTemplate kliens alkalmazásunkban:

@Bean public OAuth2RestOperations restOperations (OAuth2ProtectedResourceDetails erőforrás, OAuth2ClientContext kontextus) {return new OAuth2RestTemplate (erőforrás, kontextus); }

Miután konfiguráltuk a babot, a kontextus továbbítja a hozzáférési tokent a kért szolgáltatásoknak, és frissíti a tokent is, ha lejár.

4. OAuth token továbbítása a RestTemplate

Korábban meghatároztuk a restOperations típusú bab OAuth2RestTemplate kliens alkalmazásunkban. Ennek eredményeként használhatjuk a getForObject () a metódusa OAuth2RestTemplate kérelem elküldéséhez a szükséges tokenekkel egy védett erőforrás-kiszolgálóhoz ügyfelünktől.

Először határozzunk meg egy végpontot, amely hitelesítést igényel az erőforrás-kiszolgálónkon:

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

Ez egy egyszerű REST végpont, amely az a JSON reprezentációját adja vissza Személy tárgy.

Most, kérelmet küldhetünk a kliens alkalmazásból a getForObject () módszer, amely továbbítja a tokent az erőforrás-kiszolgálónak:

@Autowired private RestOperations restOperations; @GetMapping ("/ personInfo") nyilvános ModelAndView person () {ModelAndView mav = new ModelAndView ("personinfo"); String personResourceUrl = "// localhost: 9000 / fő"; mav.addObject ("személy", restOperations.getForObject (personResourceUrl, String.class)); return mav; }

5. A Zuul beállítása a Token Relay számára

Ha egy tokent szeretnénk továbbítani a proxy szolgáltatások felé, használhatjuk a Spring Cloud Zuul beágyazott fordított proxyt.

Először hozzá kell adnunk a Maven-függőséget a Zuullal való együttműködéshez:

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

Ezután hozzá kell adnunk a @EnableZuulProxy kommentár a konfigurációs osztályunkra az Ügyfél alkalmazásban:

@Configuration @ EnableOAuth2Sso @EnableZuulProxy nyilvános osztály SiteSecurityConfigurer kiterjeszti a WebSecurityConfigurerAdapter {// ...}

Már csak a Zuul konfigurációs tulajdonságait kell hozzáadni a sajátunkhoz alkalmazás.yml fájl:

zuul: sensitiveHeaders: Cookie, Set-Cookie útvonalak: erőforrás: elérési út: / api / ** url: // localhost: 9000 user: elérési út: / user / ** url: // localhost: 9000 / user

Bármely kérelem érkezik aapi Az ügyfélalkalmazás végpontja átirányításra kerül az erőforrás-kiszolgáló URL-jére. Meg kell adnunk a felhasználói hitelesítő adatok végpontjának URL-jét is.

6. Következtetés

Ebben a rövid cikkben azt vizsgáltuk, hogyan használhatjuk a Spring Cloud Security-t az OAuth2-vel és a Zuullal a biztonságos engedélyezési és erőforrás-kiszolgálók konfigurálásához, valamint hogyan továbbíthatjuk az OAuth2-tokeneket a kiszolgálók között Oauth2RestTemplate és beágyazott Zuul Proxy.

Mint mindig, a kód elérhető a GitHubon.