SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Katika kampuni yoyote kubwa, na X5 Retail Group sio ubaguzi, inapoendelea, idadi ya miradi inayohitaji idhini ya mtumiaji huongezeka. Baada ya muda, mpito usio na mshono wa watumiaji kutoka kwa programu moja hadi nyingine unahitajika, na kisha kuna haja ya kutumia seva moja ya Single-On (SSO). Lakini vipi wakati watoa vitambulisho kama vile AD au wengine ambao hawana sifa za ziada tayari wanatumika katika miradi mbalimbali. Kundi la mifumo inayoitwa "mawakala wa kitambulisho" watakuja kuwaokoa. Wanaofanya kazi zaidi ni wawakilishi wake, kama vile Keycloak, Usimamizi wa Ufikiaji wa Gravitee, n.k. Mara nyingi, hali za utumiaji zinaweza kuwa tofauti: mwingiliano wa mashine, ushiriki wa mtumiaji, n.k. Suluhisho lazima liunge mkono utendakazi unaonyumbulika na hatari ambao unaweza kuchanganya mahitaji yote katika moja, na suluhisho kama hizo kampuni yetu sasa ina wakala wa dalili - Keycloak.

SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Keycloak ni kitambulisho cha chanzo huria na bidhaa ya udhibiti wa ufikiaji inayodumishwa na RedHat. Ni msingi wa bidhaa za kampuni kwa kutumia SSO - RH-SSO.

Dhana za kimsingi

Kabla ya kuanza kushughulika na suluhisho na mbinu, unapaswa kuamua katika suala na mlolongo wa michakato:

SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Utambulisho ni utaratibu wa kutambua somo kwa kitambulisho chake (kwa maneno mengine, hii ni ufafanuzi wa jina, kuingia au nambari).

Uthibitishaji - hii ni utaratibu wa uthibitishaji (mtumiaji anaangaliwa na nenosiri, barua inakaguliwa na saini ya elektroniki, nk)

Authorization - hii ni utoaji wa upatikanaji wa rasilimali (kwa mfano, kwa barua pepe).

Kifuniko cha Dalali wa Kitambulisho

Nguo ya funguo ni kitambulisho cha chanzo huria na suluhisho la usimamizi wa ufikiaji iliyoundwa kwa matumizi katika IS ambapo mifumo ya usanifu wa huduma ndogo inaweza kutumika.

Keycloak inatoa vipengele kama vile kuingia mara moja (SSO), utambulisho uliosimamiwa na kuingia kwa jamii, shirikisho la watumiaji, adapta za mteja, kiweko cha msimamizi na kiweko cha usimamizi wa akaunti.

Utendaji wa kimsingi unaoungwa mkono na Keycloak:

  • Kuingia Mara Moja na Toka Moja kwa Programu za kivinjari.
  • Usaidizi wa OpenID/OAuth 2.0/SAML.
  • Udalali wa Utambulisho - uthibitishaji kwa kutumia OpenID Connect ya nje au watoa huduma za utambulisho wa SAML.
  • Kuingia kwa Kijamii - Google, GitHub, Facebook, Usaidizi wa Twitter kwa kitambulisho cha mtumiaji.
  • Shirikisho la Watumiaji - maingiliano ya watumiaji kutoka kwa seva za LDAP na Active Directory na watoa huduma wengine wa utambulisho.
  • Daraja la Kerberos - kwa kutumia seva ya Kerberos kwa uthibitishaji wa kiotomatiki wa mtumiaji.
  • Dashibodi ya Msimamizi - kwa usimamizi mmoja wa mipangilio na chaguzi za suluhisho kupitia Wavuti.
  • Dashibodi ya Usimamizi wa Akaunti - kwa usimamizi wa kibinafsi wa wasifu wa mtumiaji.
  • Ubinafsishaji wa suluhisho kulingana na utambulisho wa shirika la kampuni.
  • Uthibitishaji wa 2FA - Usaidizi wa TOTP/HOTP kwa kutumia Kithibitishaji cha Google au FreeOTP.
  • Mtiririko wa Kuingia - kujiandikisha kwa mtumiaji, kurejesha nenosiri na kuweka upya, na wengine wanawezekana.
  • Usimamizi wa Kipindi - wasimamizi wanaweza kudhibiti vipindi vya watumiaji kutoka kwa sehemu moja.
  • Ramani za Ishara - sifa za mtumiaji, majukumu na sifa zingine zinazohitajika kwa ishara.
  • Usimamizi wa sera unaonyumbulika katika nyanja zote, programu na watumiaji.
  • Usaidizi wa CORS - Adapta za Wateja zina usaidizi wa ndani wa CORS.
  • Violesura vya Watoa Huduma (SPI) - Idadi kubwa ya SPI zinazokuruhusu kubinafsisha vipengele mbalimbali vya seva: mtiririko wa uthibitishaji, watoa huduma za utambulisho, uchoraji ramani wa itifaki, na zaidi.
  • Adapta za kiteja za programu za JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Usaidizi wa kufanya kazi na programu mbalimbali zinazotumia maktaba ya OpenID Connect Relying Party au Maktaba ya Mtoa Huduma ya SAML 2.0.
  • Inaweza kupanuliwa kwa kutumia programu-jalizi.

Kwa michakato ya CI/CD, na vile vile otomatiki ya michakato ya usimamizi katika Keycloak, REST API / JAVA API inaweza kutumika. Nyaraka zinapatikana kwa njia ya kielektroniki:

API YA REST https://www.keycloak.org/docs-api/8.0/rest-api/index.html
Java API https://www.keycloak.org/docs-api/8.0/javadocs/index.html

Watoa Utambulisho wa Biashara (On-Jumba)

Uwezo wa kuthibitisha watumiaji kupitia huduma za Shirikisho la Watumiaji.

SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Uthibitishaji wa kupita unaweza pia kutumika - ikiwa watumiaji watathibitisha kwenye vituo vya kazi kwa kutumia Kerberos (LDAP au AD), basi wanaweza kuthibitishwa kiotomatiki kwa Keycloak bila kulazimika kuingiza jina lao la mtumiaji na nenosiri tena.

Kwa uthibitishaji na idhini zaidi ya watumiaji, inawezekana kutumia DBMS ya uhusiano, ambayo inatumika zaidi kwa mazingira ya maendeleo, kwani haihusishi mipangilio ya muda mrefu na ushirikiano katika hatua za mwanzo za miradi. Kwa chaguomsingi, Keycloak hutumia DBMS iliyojengewa ndani kuhifadhi mipangilio na data ya mtumiaji.

Orodha ya DBMS inayotumika ni pana na inajumuisha: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle na zingine. Zilizojaribiwa zaidi kufikia sasa ni Oracle 12C Release1 RAC na nguzo ya Galera 3.12 ya MariaDB 10.1.19.

Watoa vitambulisho - kuingia kwa kijamii

Inawezekana kutumia kuingia kutoka kwa mitandao ya kijamii. Ili kuwezesha uwezo wa kuthibitisha watumiaji, tumia kiweko cha msimamizi wa Keyclock. Mabadiliko katika msimbo wa maombi hayahitajiki na utendakazi huu unapatikana nje ya boksi na unaweza kuamilishwa katika hatua yoyote ya mradi.

SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Inawezekana kutumia watoa huduma za Utambulisho wa OpenID/SAML kwa uthibitishaji wa mtumiaji.

Matukio ya kawaida ya uidhinishaji kwa kutumia OAuth2 katika Keycloak

Mtiririko wa Msimbo wa Uidhinishaji - kutumika na maombi ya upande wa seva. Mojawapo ya aina za kawaida za idhini ya uidhinishaji kwa sababu inafaa kwa programu za seva ambapo msimbo wa chanzo wa programu na data ya mteja haipatikani kwa watu wa nje. Mchakato katika kesi hii unategemea uelekezaji upya. Programu lazima iweze kuingiliana na wakala wa mtumiaji (wakala wa mtumiaji), kama vile kivinjari - ili kupokea misimbo ya uidhinishaji wa API iliyoelekezwa kwingine kupitia kwa wakala wa mtumiaji.

mtiririko usio wazi - inayotumiwa na programu za rununu au wavuti (programu zinazoendesha kwenye kifaa cha mtumiaji).

Aina ya ruhusa ya uidhinishaji kamili hutumiwa na programu za rununu na wavuti ambapo usiri wa mteja hauwezi kuhakikishwa. Aina ya ruhusa iliyofichwa pia hutumia uelekezaji kwingine wa wakala wa mtumiaji, ambapo tokeni ya ufikiaji hupitishwa kwa wakala wa mtumiaji kwa matumizi zaidi katika programu. Hii inafanya tokeni kupatikana kwa mtumiaji na programu zingine kwenye kifaa cha mtumiaji. Aina hii ya ruhusa ya uidhinishaji haithibitishi utambulisho wa programu, na mchakato wenyewe unategemea URL iliyoelekezwa kwingine (iliyokuwa imesajiliwa hapo awali na huduma).

Mtiririko Uliofichwa hauauni tokeni za kuonyesha upya tokeni.

Mtiririko wa Ruzuku ya Vitambulisho vya Mteja - hutumika wakati programu inafikia API. Aina hii ya ruhusa ya uidhinishaji hutumiwa kwa mwingiliano wa seva-kwa-seva ambao lazima ufanyike chinichini bila mwingiliano wa haraka wa mtumiaji. Mtiririko wa ruzuku ya kitambulisho cha mteja huruhusu huduma ya wavuti (mteja wa siri) kutumia kitambulisho chake badala ya kuiga mtumiaji ili kuthibitisha wakati wa kupiga huduma nyingine ya wavuti. Kwa kiwango cha juu cha usalama, inawezekana kwa huduma ya kupiga simu kutumia cheti (badala ya siri iliyoshirikiwa) kama kitambulisho.

Vipimo vya OAuth2 vimefafanuliwa katika
RK-6749
RK-8252
RK-6819

ishara ya JWT na faida zake

JWT (JSON Web Token) ni kiwango kilicho wazi (https://tools.ietf.org/html/rfc7519) ambayo inafafanua njia fupi na inayojitosheleza ya kuhamisha habari kwa usalama kati ya wahusika kama kitu cha JSON.

Kulingana na kiwango, ishara ina sehemu tatu katika muundo wa msingi-64, ikitenganishwa na dots. Sehemu ya kwanza inaitwa kichwa, ambacho kina aina ya ishara na jina la algorithm ya hashi ya kupata saini ya dijiti. Sehemu ya pili huhifadhi habari za msingi (mtumiaji, sifa, nk). Sehemu ya tatu ni saini ya dijiti.

. .
Kamwe usihifadhi tokeni kwenye DB yako. Kwa sababu tokeni halali ni sawa na nenosiri, kuhifadhi tokeni ni kama kuhifadhi nenosiri katika maandishi wazi.
Tokeni ya ufikiaji ni ishara inayompa mmiliki wake ufikiaji wa rasilimali salama za seva. Kwa kawaida huwa na muda mfupi wa maisha na inaweza kubeba maelezo ya ziada kama vile anwani ya IP ya mhusika anayeomba tokeni.

Onyesha upya tokeni ni tokeni inayowaruhusu wateja kuomba tokeni mpya za ufikiaji baada ya muda wa maisha yao kuisha. Ishara hizi kawaida hutolewa kwa muda mrefu.

Faida kuu za kutumia katika usanifu wa microservice:

  • Uwezo wa kufikia programu na huduma mbalimbali kupitia uthibitishaji wa wakati mmoja.
  • Kwa kukosekana kwa idadi ya sifa zinazohitajika katika wasifu wa mtumiaji, inawezekana kuimarisha data inayoweza kuongezwa kwenye mzigo wa malipo, ikiwa ni pamoja na automatiska na ya kuruka.
  • Hakuna haja ya kuhifadhi habari kuhusu vipindi vinavyotumika, programu tumizi ya seva inahitaji tu kuthibitisha saini.
  • Udhibiti rahisi zaidi wa ufikiaji kupitia sifa za ziada katika mzigo wa malipo.
  • Matumizi ya saini ya ishara kwa kichwa na mzigo wa malipo huongeza usalama wa suluhisho kwa ujumla.

ishara ya JWT - muundo

Cheo - kwa chaguo-msingi, kichwa kina aina tu ya ishara na algorithm inayotumiwa kwa usimbuaji.

Aina ya ishara imehifadhiwa kwenye kitufe cha "type". Kitufe cha 'aina' kimepuuzwa katika JWT. Ikiwa kitufe cha "charaza" kipo, thamani yake lazima iwe JWT ili kuonyesha kuwa kitu hiki ni Tokeni ya Wavuti ya JSON.

Kitufe cha pili "alg" kinafafanua algorithm inayotumiwa kusimba ishara. Inapaswa kuwekwa kwa HS256 kwa chaguo-msingi. Kijajuu kimesimbwa katika base64.

{ "alg": "HS256", "type": "JWT"}
mzigo (yaliyomo) - mzigo huhifadhi taarifa yoyote inayohitaji kuangaliwa. Kila ufunguo katika upakiaji unajulikana kama "dai". Kwa mfano, unaweza kuingiza programu tu kwa mwaliko (tangazo lililofungwa). Tunapotaka kualika mtu kushiriki, tunamtumia barua ya mwaliko. Ni muhimu kuangalia kwamba barua pepe ni ya mtu anayekubali mwaliko, kwa hiyo tutajumuisha anwani hii kwenye mzigo wa malipo, kwa hili tunaihifadhi kwenye ufunguo wa "barua pepe".

{"barua pepe": "[barua pepe inalindwa]"}

Vifunguo katika upakiaji vinaweza kuwa vya kiholela. Walakini, kuna wachache waliohifadhiwa:

  • iss (Mtoaji) - Hubainisha maombi ambayo tokeni inatumwa.
  • ndogo (Somo) - inafafanua somo la ishara.
  • aud (Hadhira) ni safu nyeti ya mifuatano au URI ambazo ni orodha ya wapokeaji wa tokeni hii. Wakati upande wa kupokea unapokea JWT na ufunguo uliopewa, lazima iangalie uwepo wa yenyewe katika wapokeaji - vinginevyo kupuuza ishara.
  • exp (Muda wa Kuisha) - Huonyesha wakati ishara inaisha. Kiwango cha JWT kinahitaji utekelezaji wote kukataa tokeni ambazo muda wake umeisha. Kitufe cha exp lazima kiwe muhuri wa muda katika umbizo la unix.
  • nbf (Si Kabla) ni wakati katika umbizo la unix ambalo huamua wakati ambapo ishara inakuwa halali.
  • iat (Imetolewa Saa) - Ufunguo huu unawakilisha wakati tokeni ilitolewa na inaweza kutumika kubainisha umri wa JWT. Kitufe cha iat lazima kiwe muhuri wa muda katika umbizo la unix.
  • Jti (Kitambulisho cha JWT) - mfuatano unaofafanua kitambulishi cha kipekee cha tokeni hii, ni nyeti kwa kadhia.

Ni muhimu kuelewa kwamba mzigo wa malipo hausambazwi kwa njia iliyosimbwa (ingawa tokeni zinaweza kuwekwa na basi inawezekana kusambaza data iliyosimbwa). Kwa hiyo, haiwezi kuhifadhi habari yoyote ya siri. Kama kichwa, upakiaji umesimbwa base64.
Saini - tunapokuwa na kichwa na mzigo wa malipo, tunaweza kuhesabu saini.

Base64-encoded: kichwa na mzigo wa malipo huchukuliwa, huunganishwa kwenye kamba kupitia dot. Kisha kamba hii na ufunguo wa siri ni pembejeo kwa algorithm ya usimbuaji iliyotajwa kwenye kichwa (ufunguo wa "alg"). Ufunguo unaweza kuwa kamba yoyote. Mistari ndefu zaidi itapendelewa zaidi kwani itachukua muda mrefu kuchukua.

{"alg":"RSA1_5","payload":"A128CBC-HS256"}

Kujenga Usanifu wa Nguzo ya Keycloak ya Failover

Unapotumia kikundi kimoja kwa miradi yote, kuna mahitaji yaliyoongezeka ya suluhisho la SSO. Wakati idadi ya miradi ni ndogo, mahitaji haya hayaonekani sana kwa miradi yote, hata hivyo, pamoja na ongezeko la idadi ya watumiaji na ushirikiano, mahitaji ya upatikanaji na utendaji huongezeka.

Kuongezeka kwa hatari ya kushindwa kwa SSO moja huongeza mahitaji ya usanifu wa suluhisho na mbinu zinazotumiwa kwa vipengele visivyohitajika na husababisha SLA yenye tight sana. Katika suala hili, mara nyingi zaidi wakati wa maendeleo au hatua za mwanzo za utekelezaji wa ufumbuzi, miradi ina miundombinu yao isiyo na makosa. Maendeleo yanapoendelea, inahitajika kuweka fursa za maendeleo na kuongeza. Ni rahisi zaidi kuunda nguzo ya kushindwa kwa kutumia uboreshaji wa chombo au mbinu ya mseto.

Ili kufanya kazi katika modi Inayotumika/Inayotumika na Inayotumika/Inayotumika, inahitajika kuhakikisha uthabiti wa data katika hifadhidata ya uhusiano - nodi za hifadhidata zote mbili lazima ziigwa kwa usawa kati ya vituo tofauti vya data vilivyosambazwa kijiografia.

Mfano rahisi zaidi wa ufungaji usio na makosa.

SSO juu ya usanifu wa huduma ndogo. Tunatumia Keycloak. Sehemu 1

Ni faida gani za kutumia nguzo moja:

  • Upatikanaji wa juu na utendaji.
  • Msaada kwa njia za uendeshaji: Inayotumika / Inayotumika, Inayotumika / Inayotumika.
  • Uwezo wa kuongeza nguvu - wakati wa kutumia uboreshaji wa chombo.
  • Uwezekano wa usimamizi na ufuatiliaji wa kati.
  • Mbinu ya umoja ya utambuzi/uthibitishaji/uidhinishaji wa watumiaji katika miradi.
  • Mwingiliano wa uwazi zaidi kati ya miradi tofauti bila ushiriki wa mtumiaji.
  • Uwezo wa kutumia tena ishara ya JWT katika miradi mbalimbali.
  • Pointi moja ya uaminifu.
  • Uzinduzi wa haraka wa miradi kwa kutumia huduma ndogo/uboreshaji wa chombo (hakuna haja ya kuinua na kusanidi vipengele vya ziada).
  • Inawezekana kununua msaada wa kibiashara kutoka kwa muuzaji.

Nini cha Kutafuta Wakati wa Kupanga Nguzo

DBMS

Keycloak hutumia mfumo wa usimamizi wa hifadhidata kuhifadhi: milki, wateja, watumiaji, n.k.
Aina mbalimbali za DBMS zinatumika: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak inakuja na hifadhidata yake ya uhusiano iliyojengwa ndani. Inapendekezwa kutumia kwa mazingira ambayo hayajapakiwa - kama vile mazingira ya maendeleo.

Ili kufanya kazi katika modi Inayotumika/Inayotumika na Inayotumika/Inayotumika, uthabiti wa data katika hifadhidata ya uhusiano inahitajika, na nodi zote mbili za nguzo za hifadhidata hunakiliwa kwa usawa kati ya vituo vya data.

Akiba iliyosambazwa (Infinspan)

Ili nguzo ifanye kazi kwa usahihi, maingiliano ya ziada ya aina zifuatazo za kache kwa kutumia Gridi ya Data ya JBoss inahitajika:

Vipindi vya uthibitishaji - hutumika kuhifadhi data wakati wa kuthibitisha mtumiaji maalum. Maombi kutoka kwa akiba hii kwa kawaida hujumuisha kivinjari na seva ya Keycloak pekee, sio programu.

Tokeni za kitendo hutumika kwa matukio ambapo mtumiaji anahitaji kuthibitisha kitendo bila kulandanisha (kupitia barua pepe). Kwa mfano, wakati wa mtiririko wa nenosiri uliosahau, akiba ya actionTokens Infinispan hutumiwa kufuatilia metadata kuhusu tokeni za kitendo zinazohusiana ambazo tayari zimetumika, kwa hivyo haziwezi kutumika tena.

Kuweka akiba na kubatilisha data inayoendelea - inayotumika kuweka akiba ya data inayoendelea ili kuepusha maswali yasiyo ya lazima kwenye hifadhidata. Wakati seva yoyote ya Keycloak inasasisha data, seva zingine zote za Keycloak katika vituo vyote vya data zinahitaji kujua kuihusu.

Kazi - Inatumika tu kutuma ujumbe batili kati ya nodi za nguzo na vituo vya data.

Vipindi vya watumiaji - vinavyotumika kuhifadhi data kuhusu vipindi vya mtumiaji ambavyo ni halali kwa muda wa kipindi cha kivinjari cha mtumiaji. Akiba lazima ichakate maombi ya HTTP kutoka kwa mtumiaji wa mwisho na programu.

Ulinzi wa nguvu - hutumika kufuatilia data kuhusu kuingia kwa kushindwa.

Kusawazisha mzigo

Kisawazisha cha upakiaji ndicho sehemu moja ya kuingilia kwa vazi kuu na lazima kiwe na vipindi vya kunata.

Seva za Maombi

Hutumika kudhibiti mwingiliano wa vipengee baina ya kila kimoja na kingine na vinaweza kuhakikishwa au kuwekewa vyombo kwa kutumia zana zilizopo za otomatiki na kuongeza kasi kwa zana za kiotomatiki za miundombinu. Matukio ya kawaida ya utumiaji katika OpenShift, Kubernates, Rancher.

Hii inahitimisha sehemu ya kwanza - ya kinadharia. Katika mfululizo unaofuata wa makala, mifano ya ushirikiano na watoa huduma mbalimbali wa utambulisho na mifano ya mipangilio itachambuliwa.

Chanzo: mapenzi.com

Kuongeza maoni