Úvod do jarnej cloudovej bezpečnosti

1. Prehľad

Modul Spring Cloud Security poskytuje funkcie súvisiace s tokenovým zabezpečením v aplikáciách Spring Boot.

Konkrétne uľahčuje jednotné prihlásenie založené na protokole OAuth2 - s podporou odovzdávania tokenov medzi servermi zdrojov, ako aj konfiguráciou následnej autentifikácie pomocou zabudovaného proxy servera Zuul.

V tomto rýchlom článku sa pozrieme na to, ako môžeme tieto funkcie nakonfigurovať pomocou klientskej aplikácie Spring Boot, autorizačného servera a rozhrania REST API fungujúceho ako zdrojový server.

Upozorňujeme, že v tomto príklade máme iba jednu klientsku aplikáciu, ktorá používa jednotné prihlásenie na demonštráciu funkcií cloudového zabezpečenia - ale v typickom scenári by sme mali minimálne dve klientske aplikácie, ktoré by odôvodňovali potrebu jednotného prihlásenia.

2. Rýchle spustenie cloudovej bezpečnostnej aplikácie

Začnime tým konfigurácia SSO v aplikácii Spring Boot.

Najprv musíme pridať spring-cloud-starter-oauth2 závislosť:

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

To tiež prinesie zabezpečenie jarného mraku závislosť.

Môžeme nakonfigurovať akúkoľvek sociálnu stránku ako Auth Server pre našu stránku alebo môžeme použiť náš vlastný server. V našom prípade sme zvolili druhú možnosť a nakonfigurovali sme aplikáciu, ktorá funguje ako autorizačný server - ktorá je nasadená lokálne na adrese // localhost: 7070 / authserver.

Náš autorizačný server používa tokeny JWT.

Okrem toho, aby ktorýkoľvek klient mohol získať poverenia používateľa, musíme nakonfigurovať náš zdrojový server bežiaci na porte 9000 s koncovým bodom, ktorý môže tieto poverenia slúžiť.

Tu sme nakonfigurovali /používateľ koncový bod, ktorý je k dispozícii na // localhost: 9000 / používateľ.

Ďalšie informácie o tom, ako nastaviť autorizačný server a zdrojový server, nájdete v našom predchádzajúcom článku tu.

Teraz môžeme pridať anotáciu do konfiguračnej triedy v našej klientskej aplikácii:

@Configuration @ EnableOAuth2Sso verejná trieda SiteSecurityConfigurer rozširuje WebSecurityConfigurerAdapter {@Override protected void configure (HttpSecurity http) vyvoláva výnimku {// ...}}

Všetky požiadavky, ktoré si vyžadujú autentizáciu, budú presmerované na autorizačný server. Aby to fungovalo, musíme tiež definovať vlastnosti servera:

security: oauth2: client: accessTokenUri: // localhost: 7070 / authserver / oauth / token userAuthorizationUri: // localhost: 7070 / authserver / oauth / authorize clientId: authserver clientSecret: passwordforauthserver resource: userInfoUri: // localhost: 9000 / user

Všimnite si, že musíme mať zabezpečenie jarného štartéra-štartéra v našej triede nájdeme uvedenú konfiguráciu funkčnú.

3. Zasielanie prístupových tokenov

Počas prenosu tokenu klient OAuth2 preposiela token OAuth2, ktorý prijal, na odchádzajúcu požiadavku na zdroj.

Odkedy sme vyhlásili @ EnableOauth2Sso anotácia, Spring Boot pridáva OAuth2ClientContext fazuľa v rozsahu požiadavky. Na základe toho si môžeme vytvoriť svoj vlastný OAuth2RestTemplate v našej klientskej aplikácii:

@Bean public OAuth2RestOperations restOperations (zdroj OAuth2ProtectedResourceDetails, kontext OAuth2ClientContext) {vrátiť nový OAuth2RestTemplate (zdroj, kontext); }

Keď sme nakonfigurovali fazuľu, kontext postúpi prístupový token požadovaným službám a tiež obnoví token, ak jeho platnosť vyprší.

4. Prenášanie tokenu OAuth pomocou protokolu RestTemplate

Predtým sme definovali a restOperations fazuľa typu OAuth2RestTemplate v našej klientskej aplikácii. Ako výsledok, môžeme použiť getForObject () metóda OAuth2RestTemplate na odoslanie žiadosti s potrebnými tokenmi na chránený zdrojový server od nášho klienta.

Najskôr definujeme koncový bod, ktorý vyžaduje autentifikáciu na našom serveri zdrojov:

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

Toto je jednoduchý koncový bod REST, ktorý vracia JSON reprezentáciu a Osoba objekt.

Teraz, môžeme poslať požiadavku z klientskej aplikácie pomocou getForObject () metóda, ktorá prenesie token na zdrojový server:

@Autowired private RestOperations restOperations; @GetMapping ("/ personInfo") public ModelAndView person () {ModelAndView mav = nový ModelAndView ("personinfo"); Reťazec personResourceUrl = "// localhost: 9000 / osoba"; mav.addObject ("osoba", restOperations.getForObject (personResourceUrl, String.class)); návrat mav; }

5. Konfigurácia Zuul pre tokenové relé

Ak by sme chceli preniesť token po prúde do služieb proxy, môžeme použiť Spring Cloud Zuul Embedded Reverse Proxy.

Najprv musíme pridať závislosť Maven pre prácu so Zuul:

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

Ďalej musíme pridať znak @EnableZuulProxy anotácia k našej konfiguračnej triede v klientskej aplikácii:

@Configuration @ EnableOAuth2Sso @EnableZuulProxy verejná trieda SiteSecurityConfigurer rozširuje WebSecurityConfigurerAdapter {// ...}

Ostáva už len pridať do našej konfiguračné vlastnosti Zuul aplikácia.yml spis:

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

Akákoľvek požiadavka prichádzajúca do /api koncový bod klientskej aplikácie bude presmerovaný na adresu URL servera zdrojov. Musíme tiež poskytnúť adresu URL koncového bodu prihlasovacích údajov používateľa.

6. Záver

V tomto rýchlom článku sme preskúmali, ako používať Spring Cloud Security s OAuth2 a Zuul na konfiguráciu zabezpečených autorizačných a zdrojových serverov, ako aj ako prenášať tokeny OAuth2 medzi servermi pomocou Oauth2RestTemplate a Embedded Zuul Proxy.

Ako vždy, kód je k dispozícii na GitHub.


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