{"id":40865,"date":"2020-02-05T10:07:04","date_gmt":"2020-02-05T07:07:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961"},"modified":"2020-02-05T10:07:04","modified_gmt":"2020-02-05T07:07:04","slug":"sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","title":{"rendered":"SSO mikroteenuste arhitektuuris. Kasutame Keycloak'i. Osa nr 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Igasse suuremate ettev\u00f5tete, sh X5 Retail Group, arenguga suureneb projektide arv, kus on vajalik kasutajate volitamine. Aja jooksul muutub oluline sujuv \u00fcleminek kasutajatelt \u00fchelt rakenduselt teisele ning seet\u00f5ttu tekib vajadus kasutada \u00fchtset sisselogimisserverit Single-Sign-On (SSO). Kuid kuidas toimida, kui selliseid identifitseerimisteenuse pakkujaid nagu AD v\u00f5i teised, kellel puuduvad t\u00e4iendavad atribuudid, juba kasutatakse erinevates projektides? Siinkohal aitavad s\u00fcsteemid, mida nimetatakse \u201eidentifitseerimisbroukeriteks\u201c. K\u00f5ige funktsionaalsemad esindajad on sellised nagu Keycloak, Gravitee Access management jpt. Kasutusskeemid v\u00f5ivad olla erinevad: masinlik suhtlemine, kasutajate osalemine jne. Lahendus peab toetama paindlikku ja skaleeritavat funktsionaalsust, mis suudab k\u00f5ik n\u00f5uded \u00fchte koondada, ja selliseks lahenduseks meie ettev\u00f5ttes on praegu identifitseerimisbrouker \u2013 Keycloak. <\/p>\n<p><img decoding=\"async\" alt=\"SSO mikroteenuste arhitektuuris. Kasutame Keycloak&#039;i. Osa nr 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a7f1d5f68fa5d07fc30f2804dc62bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKeycloak on avatud l\u00e4htekoodiga toode, mis on m\u00f5eldud identifitseerimise ja juurdep\u00e4\u00e4su kontrollimiseks ning mille toetab RedHat. See on aluseks tooted, mis kasutavad SSO \u2013 RH-SSO.<\/p>\n<h3>P\u00f5him\u00f5isted <\/h3>\n<p>\nEnne lahenduste ja l\u00e4henemiste uurimist tuleks selgeks teha terminid ja protsesside j\u00e4rjekord:<\/p>\n<p><img decoding=\"async\" alt=\"SSO mikroteenuste arhitektuuris. Kasutame Keycloak&#039;i. Osa nr 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a83d4364425aeed1019662fd1d5f152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Identifitseerimine<\/b> \u2014 see on k\u00e4itumise tuvastamise protseduur tema identifikaatori p\u00f5hjal (lihtsalt \u00f6eldes, see on nime, sisselogimise v\u00f5i numbri m\u00e4\u00e4ramine).<\/p>\n<p><b>Ahnikeerimine<\/b> \u2013 see on autentimise protseduur (kasutajat kontrollitakse parooliga, kirja kontrollitakse digitaalse allkirjaga jne.)<\/p>\n<p><b>Autoriseerimine<\/b> \u2013 see on juurdep\u00e4\u00e4su andmine mingile ressursile (n\u00e4iteks e-posti jaoks).<\/p>\n<h4>Identifitseerimisbrouker Keycloak<\/h4>\n<p>\n<b>Keycloak<\/b> \u2014 see on avatud l\u00e4htekoodiga identiteedi ja juurdep\u00e4\u00e4su haldamise lahendus, mis on m\u00f5eldud kasutamiseks infos\u00fcsteemides, kus v\u00f5ivad kasutada mikroteenuste arhitektuuri mustreid.<\/p>\n<p>Keycloak pakub selliseid funktsioone nagu \u00fchtne sisselogimine (SSO), identifitseerimise brokering ja sotsiaalne sisselogimine, kasutajate f\u00f6deratsioon, kliendiadapterid, administraatori konsool ja konto haldamise konsool.<\/p>\n<p>Keycloak'is toetatav p\u00f5hifunktsionaalsus:<\/p>\n<ul>\n<li>Single-Sign On ja Single-Sign Out brauserirakenduste jaoks.<\/li>\n<li>OpenID\/OAuth 2.0\/SAML toe pakkumine.<\/li>\n<li>Identiteed Curate \u2013 autentimine v\u00e4liste OpenID Connect v\u00f5i SAML identiteedi pakkujate kaudu.<\/li>\n<li>Sotsiaalne sisselogimine \u2013 toe pakkumine Google'ilt, GitHubilt, Facebookilt, Twitterilt kasutajate tuvastamiseks.<\/li>\n<li>Kasutajate f\u00f6deratsioon \u2013 kasutajate s\u00fcnkroniseerimine LDAP ja Active Directory serveritest ning teistest identiteedi pakkujatest.<\/li>\n<li>Kerberos sild \u2013 Kerberos serveri kasutamine kasutajate automaatseks autentimiseks.<\/li>\n<li>Administreerimise konsool \u2014 lahenduse seadete ja parameetrite \u00fchtne haldamine veebis.<\/li>\n<li>Kontohalduskonsool \u2013 iseseisev kasutajaprofiilide haldamine.<\/li>\n<li>Lahenduse kohandamine ettev\u00f5tte kaubam\u00e4rgi stiili alusel.<\/li>\n<li>2FA autentimine \u2013 TOTP\/HOTP toe pakkumine Google Authenticatori v\u00f5i FreeOTP kaudu.<\/li>\n<li>Sisselogimise protsessid \u2013 kasutajate iseregistreerimise, parooli taastamise ja l\u00e4htestamise v\u00f5imalused jne.<\/li>\n<li>Seansi haldus \u2013 administraatorid saavad hallata kasutajate sessioone \u00fchest kohast.<\/li>\n<li>Token Mappers \u2013 kasutajate atribuutide, rollide ja muude vajalike atribuutide sidumine tokenitega.<\/li>\n<li>Paindlik poliitika haldamine realm'i, rakenduse ja kasutajate kaudu.<\/li>\n<li>CORS tugi \u2013 kliendiadapterid sisaldavad sisseehitatud CORS vaikeseadeid.<\/li>\n<li>Teenuse pakkujate liidesed (SPI) \u2013 suur hulk SPI-sid, mis v\u00f5imaldavad seadistada serveri erinevaid t\u00f6\u00f6aspekte: autentimisvood, identiteedi pakkujad, protokollide sidumine ja palju muud.<\/li>\n<li>Kliendiadapterid JavaScripti rakendustele, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.<\/li>\n<li>Toe pakkumine erinevatele rakendustele, mis toetavad OpenID Connecti s\u00f5ltuvat teeki v\u00f5i SAML 2.0 teenuse pakkujate teeki.<\/li>\n<li>Laienemisv\u00f5imalus plugin'ide abil.<\/li>\n<\/ul>\n<p>\nCI\/CD protsesside jaoks ning ka Keycloakis haldustegevuste automatiseerimiseks v\u00f5ib kasutada REST API \/ JAVA API. Dokumentatsioon on saadaval elektrooniliselt: <\/p>\n<p>REST API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html<\/a><\/noindex><br \/>\nJAVA API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html<\/a><\/noindex><\/p>\n<h4>Ettev\u00f5tte taseme identiteedi pakkujad (On-Premise)<\/h4>\n<p>\nKasutajate autentimise v\u00f5imalus User Federation teenuste kaudu.<\/p>\n<p><img decoding=\"async\" alt=\"SSO mikroteenuste arhitektuuris. Kasutame Keycloak&#039;i. Osa nr 1\" src=\"\/wp-content\/uploads\/2020\/02\/59bbeaf4630855467ddb003d52b0c1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSamuti v\u00f5ib kasutada l\u00e4bivat autentimist \u2013 kui kasutajad autentitakse t\u00f6\u00f6lauaarvutites Kerberos'ega (LDAP v\u00f5i AD), saavad nad Keycloak'is automaatselt autentida ilma taas kasutajanime ja parooli sisestamiseta. <\/p>\n<p>Kasutajate autentimiseks ja edasiseks autoriseerimiseks on v\u00f5imalik kasutada relatsioonilist andmebaasi, mis on k\u00f5ige asjakohasem arenduskeskkondades, kuna see ei n\u00f5ua pikaajalisi seadistusi ja integreerimisi projektide algstaadiumis. Vaikimisi kasutab Keycloak seadeid ja kasutajaandmete salvestamiseks sisseehitatud andmebaasi.<\/p>\n<p>Toetatud andmebaaside loetelu on ulatuslik ja sisaldab: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ja teised. Praegu on k\u00f5ige rohkem testitud Oracle 12C Release1 RAC ja Galera 3.12 klaster MariaDB 10.1.19 jaoks. <\/p>\n<h4>Identifitseerimisproviderid \u2014 sotsiaalne sisselogimine <\/h4>\n<p>\nSotsiaalmeedia sisselogimise kasutamine on v\u00f5imalik. Kasutajate autentimise v\u00f5imaluse aktiveerimiseks kasutatakse Keycloacki administraatori konsooli. Rakenduste koodis ei ole muudatusi vajalikud ja see funktsionaalsus on saadaval 'karbist v\u00e4lja' ning v\u00f5ib olla aktiveeritud projekti igas staadiumis.<\/p>\n<p><img decoding=\"async\" alt=\"SSO mikroteenuste arhitektuuris. Kasutame Keycloak&#039;i. Osa nr 1\" src=\"\/wp-content\/uploads\/2020\/02\/546ddea10c79662ca37a448d3dfc1fd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKasutajate autentimiseks on v\u00f5imalik kasutada OpenID\/SAML identiteedi proviidereid.<\/p>\n<h3>T\u00fc\u00fcpilised autoriseerimisstsenaariumid OAuth2 kasutamisel Keycloakis<\/h3>\n<p>\n<b>Autoriseerimistunnuse voog <\/b> \u2014 kasutatakse serveripoolsete rakenduste (server-side applications) puhul. \u00dcks levinumaid autoriseerimistunnustamiseks kasutatavaid meetodeid, kuna see sobib h\u00e4sti serveripoolsetele rakendustele, mille kood ja kliendiandmed ei ole kolmandatele isikutele ligip\u00e4\u00e4setavad. Protsess tugineb selles juhul \u00fcmbersuunamisele (redirection). Rakendus peab olema v\u00f5imeline suhtlema kasutajaagendiga, nagu veebibrauser \u2014 saama autoriseerimistunnuseid API kaudu, mis suunatakse \u00fcmber kasutajaagendi kaudu.<\/p>\n<p><b>Kaudne voog<\/b> \u2014 kasutatakse mobiilsete v\u00f5i veebirakenduste jaoks (rakendused, mis t\u00f6\u00f6tavad kasutaja seadmes).<\/p>\n<p>Implitsiitne volitus on kasutusel mobiil- ja veebirakendustes, kus kliendi privaatsust ei saa tagada. Implitsiitne volitus kasutab ka kasutaja agendi \u00fcmber suunamist, kus p\u00e4\u00e4sukood edastatakse kasutaja agendile rakenduses edasiseks kasutamiseks. See teeb koodi kergesti k\u00e4ttesaadavaks kasutajale ja teistele rakendustele kasutaja seadmes. Sellise volituse korral ei toimu rakenduse autentimist ning protsess tugineb \u00fcmber suunamise URL-ile (eelnevalt teenuses registreeritud).<\/p>\n<p>Implitsiitne voog ei toeta p\u00e4\u00e4sukoodide uuendamise tokenite (refresh tokens) kasutamist.<br \/>\n<br \/>\n<b>Kliendi mandaadi andmise voog<\/b> \u2014 kasutatakse rakenduse juurdep\u00e4\u00e4suks API-le. See volitus on tavaliselt m\u00f5eldud server-server interaktsioonideks, mis toimuvad taustal ilma vahetu kasutaja sekkumiseta. Kliendi mandaadi voog v\u00f5imaldab veebiteenusel (privaatne klient) kasutada oma mandaate, mitte kasutaja identiteeti, autentimiseks teise veebiteenuse kutsumisel. K\u00f5rgema turvalisuse taseme saavutamiseks v\u00f5ib kutse teenus kasutada mandaadiks sertifikaati (\u00fcldise salajase asemel).<\/p>\n<p>OAuth2 spetsifikatsioon on kirjeldatud <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">RFC-6749<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc8259\">RFC-8252<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6819\">RFC-6819<\/a><\/noindex><\/p>\n<h3>JWT token ja tema eelised<\/h3>\n<p>\nJWT (JSON Web Token) \u2014 avatud standard (<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc7519\">https:\/\/tools.ietf.org\/html\/rfc7519<\/a><\/noindex>), mis m\u00e4\u00e4rab kindlaks kompaktse ja autonoomse viisi teabe turvaliseks edastamiseks osaliste vahel JSON-objekti kujul.<\/p>\n<p>Standardi kohaselt koosneb token kolmest osast base-64 formaadis, mida eraldavad punktid. Esimene osa on pealkiri (header), milles on tokeni t\u00fc\u00fcp ja h\u00e4kkimise algoritmi nimi, et saada digitaalallkiri. Teine osa salvestab p\u00f5hiteabe (kasutaja, atribuute jne). Kolmas osa on digitaalne allkiri.<\/p>\n<p>&lt;encoded header&gt;.&lt;encoded payload&gt;.&lt;signature&gt;<br \/>\n\u00c4rge kunagi salvestage tokenit oma andmebaasi. Sest kehtiv token on v\u00f5rdne parooliga, tokeni salvestamine on nagu parooli salvestamine selges\u00f5naliselt.<br \/>\n<b>P\u00e4\u00e4sutoken <\/b>\u2014 see on token, mis annab selle omanikule juurdep\u00e4\u00e4su serveri kaitstud ressurssidele. Tavaliselt on selle kehtivusaeg l\u00fchike ja see v\u00f5ib sisaldada t\u00e4iendavat teavet, nagu kliendi IP-aadress, kes seda tokenit k\u00fcsib.<\/p>\n<p><b>Refresh-token <\/b>\u2014 see on token, mis v\u00f5imaldab klientidel taotleda uusi access-token'e nende kehtivusaja l\u00f5ppedes. Need tokenid antakse tavaliselt pika aja eest.<\/p>\n<p>Peamised eelised mikroteenuste arhitektuuris:<\/p>\n<ul>\n<li>Eri rakenduste ja teenuste juurde p\u00e4\u00e4semine \u00fche autentimise kaudu.<\/li>\n<li>Kui kasutajate profiilides puuduvad vajalikud atribuudid, v\u00f5ib andmeid rikastada, sealhulgas automatiseeritult ja<\/li>\n<li>Info aktiivsete sessioonide hoidmine pole vajalik, serveri rakendus peab vaid kontrollima allkirja.<\/li>\n<li>Paindlikum juurdep\u00e4\u00e4su haldamine t\u00e4iendavate atribuutide abil kasulikus laadimises.<\/li>\n<li>Tokeni allkirja rakendamine p\u00e4ises ja kasulikes laadimistes suurendab lahenduse \u00fcldist turvalisust.<\/li>\n<\/ul>\n<p><\/p>\n<h3>JWT token \u2014 koosseis<\/h3>\n<p>\n<b>Pealkiri<\/b> \u2014 vaikimisi sisaldab p\u00e4is ainult tokeni t\u00fc\u00fcpi ja algoritmi, mis on kasutusel kr\u00fcpteerimiseks.<\/p>\n<p>Tokeni t\u00fc\u00fcp hoitakse v\u00f5tmes \"typ\". V\u00f5tme \"typ\" ignoreerib JWT. Kui v\u00f5ti \"typ\" on olemas, peab selle v\u00e4\u00e4rtus olema JWT, et n\u00e4idata, et see objekt on JSON Web Token.<\/p>\n<p>Teine v\u00f5ti \"alg\" m\u00e4\u00e4rab tokeni kr\u00fcpteerimiseks kasutatava algoritmi. Vaikimisi peaks see olema seadistatud HS256. P\u00e4is kodeeritakse base64.<\/p>\n<p>{ \"alg\": \"HS256\", \"typ\": \"JWT\"}<br \/>\n<b>Payload (sisu)<\/b> \u2014 kasulikes laadimistes hoitakse igasugust teavet, mida tuleb kontrollida. Iga v\u00f5ti kasulikes laadimistes on tuntud kui \"deklareering\". N\u00e4iteks, rakendusse saab sisse logida ainult kutse alusel (suletud kampaania). Kui me soovime kedagi kutsea, saadame talle kutse. Oluline on kontrollida, et e-posti aadress kuulub inimesele, kes kutset aktsepteerib, seega lisame selle aadressi kasuliku laadimise, selle jaoks salvestame selle v\u00f5tmesse \"e-mail\".<\/p>\n<p>{ \"email\": \"example@x5.ru\" }<br \/>\n<br \/>\nPayloadi v\u00f5tmed v\u00f5ivad olla suvalised. Siiski on m\u00f5ningaid reserveeritud:<\/p>\n<ul>\n<li>iss (Issuer) \u2014 m\u00e4\u00e4rab rakenduse, millest token saadetakse.<\/li>\n<li>sub (Subject) \u2014 m\u00e4\u00e4ratleb tokeni teema.<\/li>\n<li>aud (Audience) \u2013 suurtundlikest stringidest v\u00f5i URI-dest koosnev massiiv, mis on selle tokeni saajate loetelu. Kui vastuv\u00f5tja saab JWT koos selle v\u00f5tmega, peab ta kontrollima, kas ta on saajate hulgas \u2014 muidu tuleb token ignoreerida.<\/li>\n<li>exp (Expiration Time) \u2014 n\u00e4itab, millal tokeni kehtivus l\u00f5ppeb. JWT standard n\u00f5uab, et k\u00f5ikides oma rakendustes l\u00fckataks tagasi aegunud tokeneid. Exp v\u00f5ti peab olema Unix vormingus ajatempring.<\/li>\n<li>nbf (Not Before) \u2014 see on Unix vormingus aeg, mis m\u00e4\u00e4ratleb, millal token hakkab kehtima.<\/li>\n<li>iat (Issued At) \u2014 see v\u00f5ti esindab aega, millal token anti v\u00e4lja ja seda saab kasutada JWT vanuse m\u00e4\u00e4ramiseks. iat v\u00f5ti peab olema Unix vormingus ajatempring.<\/li>\n<li>Jti (JWT ID) \u2014 string, mis m\u00e4\u00e4ratleb selle tokeni unikaalse identifikaatori, arvestades suurtundlikkust.<\/li>\n<\/ul>\n<p>\nOluline on m\u00f5ista, et koormust ei edastata kr\u00fcpteeritud kujul (kuigi tokenid v\u00f5ivad olla pesakonnas ja siis on v\u00f5imalik edastada kr\u00fcpteeritud andmeid). Seega ei saa selles salvestada mingeid salajasi andmeid. Nagu pealkiri, kodeeritakse koormus base64.<br \/>\n<b>Allkiri<\/b> \u2014 kui meil on pealkiri ja koormus, saame arvutada allkirja.<\/p>\n<p>V\u00f5etakse base64 kodeeritud pealkiri ja koormus, need \u00fchendatakse punktiga stringiks. Seej\u00e4rel antakse see string ja salajane v\u00f5ti kr\u00fcpteerimise algoritmi, mis on m\u00e4\u00e4ratud pealkirjas (v\u00f5ti \u00abalg\u00bb). V\u00f5ti v\u00f5ib olla mis tahes string. Pikemad stringid on eelistatavamad, kuna nende leidmiseks kulub rohkem aega.<\/p>\n<p>{\"alg\":\"RSA1_5\",\"payload\":\"A128CBC-HS256\"}<\/p>\n<h3>Keycloaki talitlush\u00e4iredeta klastrite arhitektuuri loomine<\/h3>\n<p>\nKuna kasutatakse \u00fchte klastrit k\u00f5igi projektide jaoks, t\u00f5usevad SSO lahenduse n\u00f5udmised. Kui projektide arv on v\u00e4ike, ei ole see v\u00e4gagi tundlik, kuid kasutajate ja integratsioonide arvu suurenedes kasvavad n\u00f5udmised k\u00e4ttesaadavuse ja j\u00f5udluse osas. <\/p>\n<p>\u00dcheainsa SSO t\u00f5usvad riskid suurendavad lahenduse arhitektuuri ja kasutatavate komponentide varukoopiate n\u00f5udeid, tuues kaasa v\u00e4ga range SLA. Seet\u00f5ttu on sageli lahenduste arendamise v\u00f5i varases rakendamisfaasis projektidel oma mittet\u00e4iendav infrastruktuur. Arengu k\u00e4igus peab olema rajatud arenguv\u00f5imalused ja skaleeritavus. K\u00f5ige paindlikum on ehitada t\u00f5rkeohutu klaster konteinerite virtualiseerimise v\u00f5i h\u00fcbriidl\u00e4henemise abil. <\/p>\n<p>Active\/Active ja Active\/Passive klastrire\u017eiimi t\u00f6\u00f6tamiseks tuleb tagada andmete j\u00e4rjepidevus relatsioonilises andmebaasis \u2014 m\u00f5lemad andmebaasi s\u00f5lmed peavad olema geograafiliselt hajutatud andmekeskuste vahel s\u00fcnkh\u00e4\u00e4lestatud.<\/p>\n<p>Lihtsaim n\u00e4ide t\u00f5rkeohutust paigaldusest.<\/p>\n<p><img decoding=\"async\" alt=\"SSO mikroteenuste arhitektuuris. Kasutame Keycloak&#039;i. Osa nr 1\" src=\"\/wp-content\/uploads\/2020\/02\/c0df30a07e7dda5ae892a1fca3790a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMillised on \u00fchtse klastriga kasutamise eelised:<\/p>\n<ul>\n<li>K\u00f5rge k\u00e4ttesaadavus ja j\u00f5udlus.<\/li>\n<li>Toetatakse t\u00f6\u00f6re\u017eiime: Active\/Active, Active\/Passive.<\/li>\n<li>D\u00fcnaamilise skaleerimise v\u00f5imalus \u2014 konteinerite virtualiseerimise kasutamisel.<\/li>\n<li>Keskne haldamise ja j\u00e4lgimise v\u00f5imalus.<\/li>\n<li>\u00dchtne l\u00e4henemine kasutajate tuvastamiseks, autentimiseks ja autoriseerimiseks projektides.<\/li>\n<li>Selgem koost\u00f6\u00f6 erinevate projektide vahel ilma kasutajate sekkumiseta.<\/li>\n<li>JWT tokeni uuesti kasutamise v\u00f5imalus erinevates projektides.<\/li>\n<li>\u00dcksik usalduspunkt.<\/li>\n<li>Projektide kiirem k\u00e4ivitamine mikroteenuste v\u00f5i konteinerite virtualiseerimise kasutamisega (lisakomponentide \u00fclesehitamist ja seadistamist pole vajalik).<\/li>\n<li>On v\u00f5imalik hankida kaubanduslikku tuge tootjalt. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Millele tuleks klastrite planeerimisel t\u00e4helepanu p\u00f6\u00f6rata<\/h3>\n<p><\/p>\n<h4>andmebaase<\/h4>\n<p>\nKeycloak kasutab andmebaasi halduss\u00fcsteemi realmide, klientide, kasutajate jne salvestamiseks.<br \/>\nToetatakse suurt hulka andmebaasis\u00fcsteeme: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak on varustatud oma sisseehitatud relatsioonilise andmebaasiga. Soovitatav on kasutada v\u00e4hem koormatud keskkondades \u2014 n\u00e4iteks arenduskeskkondades.<\/p>\n<p>Active\/Active ja Active\/Passive klastrire\u017eiimi t\u00f6\u00f6tamiseks tuleb tagada andmete j\u00e4rjepidevus relatsioonilises andmebaasis ja m\u00f5lemad andmebaasi klastris\u00f5lmed s\u00fcnkh\u00e4\u00e4lestatakse andmekeskuste vahel.<\/p>\n<h4>Jaotatud vahem\u00e4lu (Infinispan)<\/h4>\n<p>\nKlastri korrektseks on vajalik t\u00e4iendav s\u00fcnkroniseerimine j\u00e4rgmiste vahem\u00e4lu t\u00fc\u00fcpide vahel JBoss Data Grid kasutades:<\/p>\n<p>Autentimise seansid \u2014 kasutatakse konkreetse kasutaja autentimise andmete salvestamiseks. Selles vahem\u00e4lus olevad p\u00e4ringud sisaldavad tavaliselt ainult veebibrauserit ja Keycloki serverit, mitte rakendust.<\/p>\n<p>Tegevustokenid \u2014 kasutatakse stsenaariumides, kus kasutaja peab kinnitama toimingu as\u00fcnkroonselt (e-posti teel). N\u00e4iteks parooli taastamise protsessi k\u00e4igus j\u00e4lgib actionTokens Infinispan seotud tegevuste tokenite metadata, mis on juba kasutatud, seega ei saa neid uuesti kasutada.<\/p>\n<p>P\u00fcsivate andmete vahem\u00e4lu ja kehtetuks tunnistamine \u2013 kasutatakse p\u00fcsivate andmete vahem\u00e4llu salvestamiseks, et v\u00e4ltida liigseid p\u00e4ringuid andmebaasile. Kui m\u00f5ni Keycloki server uuendab andmeid, peavad k\u00f5ik teised Keycloki serverid k\u00f5igis andmekeskustes sellest teadlikud olema.<\/p>\n<p>T\u00f6\u00f6 \u2014 kasutatakse ainult s\u00f5numite edastamiseks kehtetuks tunnistamise kohta klastrite s\u00f5lmede ja andmekeskuste vahel. <\/p>\n<p>Kasutaja seansid \u2014 kasutatakse kasutaja seansside andmete salvestamiseks, mis kehtivad kasutaja brauseri seansi jooksul. Vahem\u00e4lu peab t\u00f6\u00f6tlema l\u00f5ppkasutaja ja rakenduse HTTP-p\u00e4ringuid. <\/p>\n<p>R\u00fcnderessursside kaitse \u2014 kasutatakse eba\u00f5nnestunud sisenemiste andmete j\u00e4lgimiseks. <\/p>\n<h4>Koormuse tasakaalustamine<\/h4>\n<p>\nLaadimise tasakaalustaja on ainus sisenepunkt Keycloki ja peab toetama sticky sessions. <\/p>\n<h4>Rakenduste serverid<\/h4>\n<p>\nKasutatakse komponentide omavahelise suhtluse kontrollimiseks ning need v\u00f5ivad olla virtualiseeritud v\u00f5i konteineriseeritud olemasolevate automatiseerimise ja dynaamilise infrastruktuuri skaleerimise vahendite abil. K\u00f5ige levinumad juurutamisstsenaariumid OpenShiftis, Kubernetesis, Rancheris.<\/p>\n<p>Sellega on esimene osa \u2013 teoreetiline \u2014 l\u00f5petatud. J\u00e4rgmistes artiklites k\u00e4sitletakse integratsioonide n\u00e4iteid erinevate identiteediteenuse pakkujatega ja seadistuse n\u00e4iteid.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/486778\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":40866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40865","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47SSO mikroteenuste arhitektuuris. Kasutame Keycloak. Osa \u21161 | ProHoster","description":"Igas suuremas ettev\u00f5ttes, sealhulgas X5 Retail Groupis, kasvab projektide arv, kus on vaja kasutajate autoriseerimist.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster","og:description":"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.","og:url":"https:\/\/prohoster.info\/et\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T07:07:04+00:00","article:modified_time":"2020-02-05T07:07:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40865","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:46:14","updated":"2022-09-27 14:28:39","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/40865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=40865"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/40865\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/40866"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=40865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=40865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=40865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}