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.