Budovanie základnej mikroslužby JHipster zabezpečenej UAA

1. Prehľad

V predchádzajúcich článkoch sme sa venovali základom JHipsteru a tomu, ako ho používať na generovanie aplikácie založenej na mikroslužbách.

V tomto návode preskúmame službu Používateľský účet a autorizáciu služby JHipster - skrátene UAA - a ako ju používať na zabezpečenie plnohodnotnej aplikácie mikroslužieb založenej na JHispteri. Ešte lepšie je, že sa to všetko dá dosiahnuť bez napísania jediného riadku kódu!

2. Základné vlastnosti UAA

Dôležitou vlastnosťou aplikácií, ktoré sme vytvorili v našich predchádzajúcich článkoch, je to, že používateľské účty boli ich neoddeliteľnou súčasťou. Teraz je to v poriadku, keď máme jednu aplikáciu, ale čo keď chceme zdieľať používateľské účty medzi viacerými aplikáciami generovanými JHipster? To je miesto, kam vstupuje UAA spoločnosti JHipster.

UAH spoločnosti JHipster je mikroslužba, ktorá je postavené, nasadené a spustené nezávisle od ostatných služieb v našej aplikácii. Slúži ako:

  • Autorizačný server OAuth2 založený na implementácii Spring Boot
  • Server na správu identít, ktorý odhaľuje CRUD API používateľského účtu

JHipster UAA podporuje aj typické funkcie prihlásenia, ako je samoregistrácia a „zapamätaj si ma“. A samozrejme sa plne integruje s ostatnými službami JHipster.

3. Nastavenie vývojového prostredia

Pred začatím akéhokoľvek vývoja si najskôr musíme byť istí, že naše prostredie má nastavené všetky potrebné predpoklady. Okrem všetkých nástrojov popísaných v našom článku Úvod do JHipster budeme potrebovať spustený register JHipster. Rovnako ako rýchla rekapitulácia, služba registra umožňuje rôznym službám, ktoré vytvoríme, nájsť a navzájom sa rozprávať.

Celý postup generovania a spustenia registra je popísaný v časti 4.1 nášho článku JHipster with Microservice Architecture, takže ho tu nebudeme opakovať. K dispozícii je tiež Dockerov obraz, ktorý je možné použiť ako alternatívu.

4. Generovanie novej služby JHipster UAA

Vygenerujme si našu službu UAA pomocou nástroja príkazového riadku JHipster:

$ mkdir uaa $ cd uaa $ jhipster 

Prvá otázka, ktorú si musíme zodpovedať, je, aký typ aplikácie chceme generovať. Pomocou klávesov so šípkami vyberieme možnosť „JHipster UAA (pre autentifikáciu mikroslužbou OAuth2)“:

Ďalej sa zobrazí výzva na niekoľko otázok týkajúcich sa konkrétnych podrobností týkajúcich sa generovanej služby, ako je napríklad názov aplikácie, port servera a zisťovanie služby:

Predvolené odpovede sú väčšinou v poriadku. Pokiaľ ide o základný názov aplikácie, čo ovplyvňuje mnoho vygenerovaných artefaktov, sme si vybrali „Uaa“ (malé písmená) - rozumné meno. Ak chceme, môžeme sa pohrať s ostatnými hodnotami, ale nezmení to hlavné vlastnosti vygenerovaného projektu.

Po zodpovedaní týchto otázok vytvorí JHipster všetky súbory projektu a nainštaluje sa npm závislosti balíkov (ktoré sa v tomto prípade skutočne nepoužívajú).

Teraz môžeme na vytvorenie a spustenie našej služby UAA použiť miestny skript Maven:

$ ./mvnw ... vytváranie správ vynechané 2018-10-14 14:07: 17.995 INFO 18052 --- [restartedMain] com.baeldung.jhipster.uaa.UaaApp: ------------ ---------------------------------------------- Aplikácia 'uaa' beží! Prístupové adresy URL: Lokálne: // localhost: 9999 / Externé: //192.168.99.1:9999/ Profily: [dev, naparovanie] ------------------- --------------------------------------- 2018-10-14 14: 07: 18.000 INFO 18052 --- [restartedMain] com.baeldung.jhipster.uaa.UaaApp: --------------------------------- ------------------------- Konfiguračný server: Pripojený k konfiguračnému serveru JHipster Registry! -------------------------------------------------- -------- 

Kľúčovou správou, ktorej je potrebné venovať pozornosť, je správa, že UAA je pripojená k registru JHipster. Táto správa naznačuje, že SAA sa dokázala zaregistrovať sama a bude k dispozícii na zistenie inými mikroslužbami a bránami.

5. Testovanie služby UAA

Pretože vygenerovaná služba UAA sama o sebe nemá používateľské rozhranie, musíme na otestovanie, či funguje podľa očakávania, použiť priame volania API.

Pred použitím v iných častiach alebo v našom systéme musíme skontrolovať, či fungujú dve funkcie: Generovanie tokenu OAuth2 a načítanie účtu.

Najprv poďme získajte nový token z koncového bodu OAuth našich UAApomocou jednoduchého zvlnenie príkaz:

$ curl -X POST --data \ "username = user & password = user & grant_type = heslo & scope = openid" \ // web_app: [chránený e-mailom]: 9999 / oauth / token 

Tu sme použili pridelenie hesla toku pomocou dvoch párov poverení. V tomto druhu toku odosielame poverenia klienta pomocou základnej autentifikácie HTTP, ktorú kódujeme priamo do adresy URL.

Poverenia koncového používateľa sa odosielajú ako súčasť tela pomocou štandardných parametrov používateľského mena a hesla. Používame tiež používateľský účet s názvom „Užívateľ“, ktorý je predvolene k dispozícii v testovacom profile.

Za predpokladu, že sme všetky podrobnosti poskytli správne, dostaneme odpoveď obsahujúcu prístupový token a obnovovací token:

{"access_token": "eyJh ... (token vynechaný)", "token_type": "nosič", "refresh_token": "eyJ ... (token vynechaný)", "expires_in": 299, "rozsah": " openid "," iat ": 1539650162," jti ":" 8066ab12-6e5e-4330-82d5-f51df16cd70f "}

Teraz môžeme použiť vrátené prístupový token získať informácie o priradenom účte pomocou účet zdroj, ktorá je k dispozícii v službe UAA:

$ curl -H "Autorizácia: Nositeľ eyJh ... (prístupový token vynechaný)" \ // localhost: 9999 / api / account {"id": 4, "login": "user", "firstName": "User" , "lastName": "User", "email": "[email protected]", "imageUrl": "", "activated": true, "langKey": "en", "createdBy": "system", " createdDate ":" 2018-10-14T17: 07: 01.336Z "," lastModifiedBy ":" system "," lastModifiedDate ": null," autority ": [" ROLE_USER "]} 

Upozorňujeme, že tento príkaz musíme vydať skôr, ako vyprší platnosť prístupového tokenu. Služba UAA štandardne vydáva tokeny platné päť minút, čo je rozumná hodnota pre produkciu.

Životnosť platných tokenov môžeme ľahko zmeniť úpravou prihláška-.yml súbor zodpovedajúci profilu, pod ktorým aplikáciu spúšťame a nastavuje uaa.web-client-configuration.access-token-validity-v-sekundách kľúč. Súbory nastavení sa nachádzajú v priečinku src / main / resources / config adresár nášho projektu UAA.

6. Generovanie brány povolenej pre UAA

Teraz, keď sme si istí, že naše služby UAA a register služieb fungujú, vytvorme pre ne ekosystém, s ktorým budú môcť interagovať. Na konci pridáme:

  • Front-end založený na uhle
  • Mikroslužba
  • Brána API, ktorá stojí pred oboma z nich

Začnime vlastne bránou, pretože to bude služba, ktorá bude rokovať s UAA o overení. Bude hostovať našu front-end aplikáciu a smerovať požiadavky API na ďalšie mikroslužby.

Opäť použijeme nástroj príkazového riadku JHipster v novovytvorenom adresári:

$ mkdir gateway $ cd gateway $ jhipster

Ako predtým, aj teraz musíme zodpovedať niekoľko otázok, aby sme mohli vygenerovať projekt. Dôležité sú tieto:

  • Typ žiadosti: musí byť „brána mikroslužieb“
  • Názov aplikácie: Tentokrát použijeme „bránu“
  • Zistenie služby: Vyberte „Register JHipster“
  • Autentický typ:Musíme zvoliť možnosť „Autentifikácia pomocou servera JHipster UAA“ tu
  • Rámec používateľského rozhrania: Vyberme možnosť „Uhlová 6“

Keď JHipster vygeneruje všetky svoje artefakty, môžeme bránu vytvoriť a spustiť pomocou poskytnutého skriptu obálky Maven:

$ ./mwnw ... veľa správ vynechaných ---------------------------------------- ------------------ Aplikácia „brána“ je spustená! Prístupové adresy URL: Lokálne: // localhost: 8080 / Externé: //192.168.99.1:8080/ Profily: [dev, naparovanie] ------------------- --------------------------------------- 2018-10-15 23:46: 43.011 INFO 21668 --- [restartedMain] c.baeldung.jhipster.gateway.GatewayApp: --------------------------------- ------------------------- Konfiguračný server: Pripojený k konfiguračnému serveru JHipster Registry! -------------------------------------------------- -------- 

Pomocou správy uvedenej vyššie môžeme k našej aplikácii pristupovať nasmerovaním nášho prehliadača na // localhost: 8080, ktorá by mala zobrazovať predvolenú vygenerovanú domovskú stránku:

Poďme do toho a prihlásime sa do našej aplikácie prechodom na Účet> Prihlásiť sa položka ponuky. Použijeme admin / admin ako poverenia, ktoré JHipster predvolene vytvára automaticky. Všetko dobre dopadne, na uvítacej stránke sa zobrazí správa potvrdzujúca úspešné prihlásenie:

Zrekapitulujme si, čo sa stalo, že sme sa sem dostali: Najprv brána poslala naše poverenia do koncového bodu tokenu OAuth2 UAA, ktorý ich overil a vygeneroval odpoveď obsahujúcu prístup a obnovovací token JWT. Brána potom tieto tokeny zobrala a poslala ich späť do prehliadača ako súbory cookie.

Ďalej Uhlové predné rozhranie nazývané / uaa / api / účet API, ktoré opäť bránu presmerovalo na UAA. V tomto procese brána vezme súbor cookie obsahujúci prístupový token a pomocou svojej hodnoty pridá k žiadosti hlavičku autorizácie.

Ak je to potrebné, môžeme celý tento tok vidieť veľmi podrobne skontrolovaním protokolov UAA aj Gateway. Plné údaje na úrovni kábla môžeme získať aj nastavením org.apache.http.wire úroveň záznamníka na DEBUG.

7. Generovanie mikroslužby s povoleným UAA

Teraz, keď je naše aplikačné prostredie funkčné, je čas pridať k nemu jednoduchú mikroslužbu. Vytvoríme mikroslužbu „citácie“, ktorá odhalí úplné rozhranie REST API, ktoré nám umožní vytvárať, dopytovať, upravovať a mazať množinu akciových ponúk. Každá citácia bude mať iba tri vlastnosti:

  • Symbol obchodnej ponuky
  • Jeho cena a
  • Časová známka posledného obchodu

Vráťme sa k nášmu terminálu a pomocou nástroja príkazového riadku JHipster vygenerujte náš projekt:

$ mkdir cituje $ cd cituje $ jhipster 

Tentokrát požiadame JHipster o vygenerovanie Aplikácia mikroslužieb, ktoré budeme nazývať „úvodzovky“. Otázky sú podobné tým, na ktoré sme odpovedali predtým. Pre väčšinu z nich si môžeme ponechať predvolené hodnoty, okrem týchto troch:

  • Zistenie služby: Vyberte „Register JHipster“, pretože ho už v našej architektúre používame
  • Cesta k aplikácii UAA: Pretože všetky adresáre projektov uchovávame v rovnakom priečinku, bude to tak ../uaa (pokiaľ sme to samozrejme nezmenili)
  • Autentický typ: Vyberte „Server JHipster UAA“

Takto bude vyzerať typická postupnosť odpovedí v našom prípade:

Keď JHipster dokončí generovanie projektu, môžeme pokračovať a postaviť ho:

$ mvnw ... veľa, veľa správ vynechaných ---------------------------------------- ------------------ Aplikácia „Citáty“ aplikácie je spustená! Prístupové adresy URL: Miestne: // localhost: 8081 / Externé: //192.168.99.1:8081/ Profily: [dev, naparovanie] ------------------- --------------------------------------- 2018-10-19 00: 16: 05.581 INFO 16092 --- [restartedMain] com.baeldung.jhipster.quotes.QuotesApp: --------------------------------- ------------------------- Konfiguračný server: Pripojený k konfiguračnému serveru JHipster Registry! -------------------------------------------------- -------- ... viac správ vynechaných 

Správa „Pripojené k konfiguračnému serveru JHipster Registry!“ je to, čo tu hľadáme. Jeho prítomnosť nám hovorí, že mikroslužba sa zaregistrovala v registri, a preto bude brána schopná smerovať požiadavky na náš zdroj „citátov“ a zobrazovať ich v peknom používateľskom rozhraní, hneď ako ich vytvoríme. Pretože používame architektúru mikroslužieb, rozdelili sme túto úlohu na dve časti:

  • Vytvorte back-end službu „citácie“
  • Vytvorte používateľské rozhranie „úvodzoviek“ v klientskom rozhraní (súčasť projektu brány)

7.1. Pridanie zdroja ponúk

Najprv musíme uistite sa, že je zastavená aplikácia mikroslužieb s ponukami - môžeme stlačiť CTRL-C v rovnakom okne konzoly, ktoré sme predtým používali na jeho spustenie.

Teraz poďme pridať entitu do projektu pomocou nástroja JHipster. Tentokrát použijeme import-jdl príkaz, ktorý nás ušetrí od zdĺhavého a na chyby náchylného procesu individuálneho poskytovania všetkých podrobností. Ďalšie informácie o formáte JDL nájdete v úplnej referencii JDL.

Ďalej my vytvorte textový súbor s názvom citáty.jh obsahujúce naše Citát definícia entityspolu s niektorými smernicami na generovanie kódu:

entita Citát {symbol Vyžaduje sa reťazec jedinečný, cena BigDecimal sa vyžaduje, lastTrade ZonedDateTime sa vyžaduje} dto Citát s mapstruct stránkovať Citát so stránkovacou službou Citovať so službouImpl mikroslužba Citovať s filtrom citátov Citovať klientRootFolder Citát s citátmi 

Teraz môžeme importovať túto definíciu entity do nášho projektu:

$ jhipster import-jdl quotes.jh 

Poznámka: Počas importu sa bude JHipster sťažovať na konflikt pri uplatňovaní zmien v master.xml spis. Môžeme si bezpečne vybrať prepísať možnosť v tomto prípade.

Teraz môžeme vytvoriť a spustiť našu mikroslužbu znova pomocou mvnw. Akonáhle je hotová, môžeme overiť, že brána zachytáva novú trasu, ktorá vedie k Brána pohľad, dostupný z Administratíva Ponuka. Tentokrát vidíme, že existuje záznam pre "/citácie/**" trasa, ktoráukazuje, že backend je pripravený na použitie v používateľskom rozhraní.

7.2. Pridanie používateľského rozhrania Citáty

Nakoniec vygenerujme CRUD UI v projekte brány, ktorý použijeme na prístup k našim cenovým ponukám. Na vygenerovanie komponentov používateľského rozhrania použijeme rovnaký súbor JDL z projektu mikroslužieb „citácie“ a naimportujeme ho pomocou nástroja JHipster. import-jdl príkaz:

$ jhipster import-jdl ../jhipster-quotes/quotes.jh ... správy vynechané? Prepísať webpack \ webpack.dev.js? r ... správy vynechané Gratulujeme, spustenie aplikácie JHipster je dokončené! 

Počas importu JHipster niekoľkokrát vyzve na akciu, ktorú by mal podniknúť v súvislosti s konfliktnými súbormi. V našom prípade môžeme jednoducho prepísať existujúce zdroje, pretože sme neurobili žiadne úpravy.

Teraz môžeme reštartovať bránu a zistiť, čo sme dosiahli. Namierme náš prehliadač na bránu na // localhost: 8080, uistite sa, že aktualizujeme jeho obsah. The Subjekty menu by teraz malo mať nový záznam pre Citácie zdroj:

Kliknutím na túto možnosť ponuky sa zobrazí Citácie obrazovka so zoznamom:

Podľa očakávania je záznam prázdny - zatiaľ sme nepridali žiadne úvodzovky! Pokúsme sa pridať jednu kliknutím na „Tlačidlo Vytvoriť novú ponuku“ v pravom hornom rohu tejto obrazovky, čím sa dostaneme k formuláru na vytvorenie / úpravu:

Vidíme, že vygenerovaný formulár má všetky očakávané funkcie:

  • Povinné polia sú označené červeným indikátorom, ktorý po vyplnení zmení farbu na zelenú
  • Dátum / čas a číselné polia používajú natívne komponenty na uľahčenie zadávania údajov
  • Túto aktivitu môžeme zrušiť, čo ponechá údaje nezmenené, alebo uložiť našu novú alebo upravenú entitu

Po vyplnení tohto formulára a zasiahnutí Uložiť uvidíme výsledky na obrazovke výpisu. Teraz môžeme vidieť nové Citácie inštanciav dátovej mriežke:

Ako správca máme tiež prístup k položke ponuky API, ktorý nás zavedie na štandardný portál Swagger API Developer Portal. Na tejto obrazovke môžeme vybrať jedno z dostupných rozhraní API, ktoré sa má vykonávať:

  • predvolené: Vlastné rozhranie API brány, ktoré zobrazuje dostupné trasy
  • uaa: Účty a používateľské rozhrania API
  • citácie: Citácie API

8. Ďalšie kroky

Aplikácia, ktorú sme doteraz vytvorili, funguje podľa očakávaní a poskytuje pevný základ pre ďalší vývoj. Určite budeme tiež musieť napísať nejaký (alebo veľa) vlastný kód, v závislosti od zložitosti našich požiadaviek. Niektoré oblasti, ktoré pravdepodobne budú potrebovať prácu, sú:

  • Prispôsobenie vzhľadu a prostredia používateľského rozhrania: To je zvyčajne celkom ľahké kvôli spôsobu, akým je front-end aplikácia štruktúrovaná - môžeme prejsť dlhú cestu jednoduchým pohrávaním sa s CSS a pridaním niektorých obrázkov
  • Zmeny úložiska používateľov: Niektoré organizácie už majú akési interné úložisko používateľov (napr. Adresár LDAP) - bude to vyžadovať zmeny na UAA, ale pekné je, že to musíme zmeniť iba raz.
  • Podrobnejšia autorizácia pre subjekty:Štandardný model zabezpečenia, ktorý používa back-end vygenerovanej entity, nemá žiadny druh zabezpečenia na úrovni inštancie a / alebo poľa - je na vývojárovi, aby pridal tieto obmedzenia na príslušnej úrovni (API alebo služba, v závislosti od prípadu)

Aj s týmito poznámkami môže pri vývoji novej aplikácie veľmi pomôcť použitie nástroja ako JHispter. Prinesie so sebou pevný základ a dokáže udržať dobrú úroveň konzistencie v našej kódovej základni tak, ako sa bude vyvíjať systém - a vývojári.

9. Záver

V tomto článku sme si ukázali, ako používať JHispter na vytvorenie funkčnej aplikácie založenej na architektúre mikroslužieb a serveri UAH od JHipstera. Dosiahli sme to bez toho, aby sme napísali jediný riadok kódu Java, čo je dosť pôsobivé.

Úplný kód pre projekty predstavené v tomto článku je ako obvykle k dispozícii v našom úložisku GitHub.


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