SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Di her pargîdaniyek mezin de, û Koma Retail X5 ne îstîsna ye, her ku pêşkeftin pêşve diçe, hejmara projeyên ku destûrnameya bikarhêner hewce dike zêde dibe. Bi demê re, veguheztinek bêkêmasî ya bikarhêneran ji serîlêdanek serîlêdanek din hewce ye û dûv re pêdivî ye ku meriv serverek Yek-Sing-On (SSO) bikar bîne. Lê gava ku pêşkêşkerên nasnameyê yên wekî AD an yên din ên ku xwedan taybetmendiyên zêde ne jixwe di projeyên cihêreng de têne bikar anîn çi bikin. Çînek pergalên bi navê "brokerên nasnameyê" dê werin alîkariyê. Ya herî bikêrhatî nûnerên wê ne, wek Keycloak, rêveberiya Gihîştina Gravitee, hwd. Pir caran, senaryoyên bikar anîn dikarin cûda bin: danûstendina makîneyê, tevlêbûna bikarhêner û hwd. Divê çareserî piştgirî bide fonksiyonên maqûl û berbelav ku bikaribe hemî hewcedariyên yekalî bike. û çareseriyek wusa Pargîdaniya me nuha xwedan brokerek nîşankirî ye - Keycloak.

SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Keycloak hilberek nasnameya çavkaniyek vekirî û kontrola gihîştinê ye ku ji hêla RedHat ve tê parastin. Ew bingeha hilberên pargîdaniyê ye ku SSO - RH-SSO bikar tîne.

Têgehên bingehîn

Berî ku hûn bi çareserî û rêbazan re mijûl bibin, divê hûn li gorî şert û rêza pêvajoyan biryar bidin:

SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Nasname prosedurek e ji bo naskirina mijarekê bi nasnameya wî (bi gotineke din, ev pênaseya nav, têketin an hejmarê ye).

Daxuyanî - ev pêvajoyek erêkirinê ye (bikarhêner bi şîfreyek tê kontrol kirin, nameyek bi îmzeyek elektronîkî tê kontrol kirin, hwd.)

Destûrkirin - ev peydakirina gihîştina çavkaniyekê ye (mînakek e-nameyê).

Nasname Broker Keycloak

keycloak çareseriyek nasnameya çavkaniya vekirî û rêveberiya gihîştinê ye ku ji bo karanîna di IS-ê de hatî çêkirin ku qalibên mîmariya mîkroxizmetê dikarin werin bikar anîn.

Keycloak taybetmendiyên wekî nîşana yekane (SSO), nasnameya brokerkirî û têketina civakî, federasyona bikarhêner, adapterên xerîdar, konsolê rêvebir û konsolê rêveberiya hesabê pêşkêşî dike.

Fonksiyona bingehîn ji hêla Keycloak ve hatî piştgirî kirin:

  • Ji bo sepanên gerokê Yek-Sign On û Yek-Sign Out.
  • Piştgiriya OpenID / OAuth 2.0 / SAML.
  • Brokera Nasnameyê - erêkirin bi karanîna pêşkêşkerên nasnameya derveyî OpenID Connect an SAML.
  • Têketina Civakî - Piştgiriya Google, GitHub, Facebook, Twitter ji bo nasnameya bikarhêner.
  • Federasyona Bikarhêner - hevdengkirina bikarhêneran ji serverên LDAP û Active Directory û pêşkêşkerên din ên nasnameyê.
  • Pira Kerberos - ji bo pejirandina otomatîkî ya bikarhêner serverek Kerberos bikar tîne.
  • Admin Console - ji bo rêveberiya yekbûyî ya mîhengan û pîvanên çareseriyê bi navgîniya Webê.
  • Konsola Rêvebiriya Hesabê - ji bo xwe-rêveberiya profîla bikarhêner.
  • Xweserkirina çareseriyê li ser bingeha nasnameya pargîdanî ya pargîdaniyê.
  • 2FA Authentication - Piştgiriya TOTP/HOTP bi karanîna Google Authenticator an FreeOTP.
  • Herikîna Têketinê - xwe-qeydkirina bikarhêner, vegerandin û vesazkirina şîfreyê, û yên din gengaz in.
  • Rêvebiriya Danişînê - rêvebir dikarin danişînên bikarhêner ji yek xalê birêve bibin.
  • Token Mappers - taybetmendiyên bikarhêner, rol û taybetmendiyên din ên pêwîst bi tokenan ve girêdidin.
  • Rêvebiriya polîtîkaya maqûl li çaral, serîlêdan û bikarhêneran.
  • Piştgiriya CORS - Adapterên xerîdar piştgiriya CORS-ê ya çêkirî heye.
  • Navberên Pêşkêşkara Karûbarê (SPI) - Hejmarek mezin a SPI-yê ku dihêle hûn cûrbecûr aliyên serverê xweş bikin: herikîna erêkirinê, pêşkêşkerên nasnameyê, nexşeya protokolê, û hêj bêtir.
  • Adapterên xerîdar ji bo sepanên JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Piştgiriya ji bo xebitandina bi sepanên cihêreng ên ku piştgirî didin pirtûkxaneya OpenID Connect Relying Party an Pirtûkxaneya Pêşkêşkarê Karûbarê SAML 2.0.
  • Bi karanîna pêvekan têne berfireh kirin.

Ji bo pêvajoyên CI / CD, û hem jî otomatîkkirina pêvajoyên rêveberiyê yên li Keycloak, REST API / JAVA API dikare were bikar anîn. Belgekirin di forma elektronîkî de heye:

REST API 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

Pêşkêşkerên Nasnameya Pargîdaniyê (Li Ser-Premise)

Bi karûbarên Federasyona Bikarhêner re îmkana pejirandina bikarhêner.

SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Nasnameya derbasbûnê jî dikare were bikar anîn - heke bikarhêner bi Kerberos (LDAP an AD) li dijî qereqolên xebatê rast bikin, wê hingê ew dikarin bixweber li Keycloak-ê werin pejirandin bêyî ku careke din navê bikarhêner û şîfreya xwe têkevin.

Ji bo verastkirin û destûrdana bêtir bikarhêneran, gengaz e ku meriv DBMS-ya têkildar bikar bîne, ku herî zêde ji bo hawîrdorên pêşkeftinê tê sepandin, ji ber ku ew di qonaxên destpêkê yên projeyan de mîheng û entegrasyonên dirêj nagire. Bi xwerû, Keycloak DBMS-ya çêkirî bikar tîne da ku mîheng û daneyên bikarhêner hilîne.

Navnîşa DBMS-ên piştgirîkirî berfireh e û tê de hene: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle û yên din. Tiştên ku heya nuha hatine ceribandin Oracle 12C Release1 RAC û Galera 3.12 koma ji bo MariaDB 10.1.19 ne.

Pêşkêşkerên nasnameyê - têketina civakî

Dibe ku meriv têketinek ji torên civakî bikar bîne. Ji bo çalakkirina kapasîteya rastkirina bikarhêneran, konsolê rêveberê Keycloack bikar bînin. Guhertinên di koda serîlêdanê de ne hewce ne û ev fonksiyon li derveyî qutiyê peyda dibe û dikare di her qonaxek projeyê de were çalak kirin.

SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Mimkun e ku meriv pêşkêşkerên Nasnameya OpenID/SAML ji bo rastkirina bikarhêner bikar bîne.

Senaryoyên destûrnameyê yên tîpîk ku OAuth2 li Keycloak bikar tînin

Destûrnameya Koda Flow - bi serîlêdanên server-side tê bikar anîn. Yek ji celebên herî gelemperî yên destûra destûrnameyê ji ber ku ew ji bo serîlêdanên serverê ku koda çavkaniyê ya serîlêdanê û daneyên xerîdar ji kesên biyanî re tune ne xweş e. Pêvajoya di vê rewşê de li ser veguhestinê ye. Pêdivî ye ku serîlêdan bikaribe bi karmendek bikarhêner (karker-karker), wek gerokek webê re têkilî dayne - da ku kodên destûrnameya API-yê ku bi navgîniya bikarhênerê ve hatî veguheztin bistînin.

herikîna nepenî - ji hêla sepanên mobîl an malperê ve têne bikar anîn (sepanên ku li ser cîhaza bikarhêner dixebitin).

Cûreya destûra destûrnameyê ya nepenî ji hêla sepanên mobîl û malperê ve tê bikar anîn ku nepeniya xerîdar nayê garantî kirin. Cûreya destûra nepenî di heman demê de beralîkirina nûnerê bikarhêner bikar tîne, bi vî rengî nîşana gihîştinê ji nûnerê bikarhêner re tê şandin da ku di serîlêdanê de bêtir bikar bîne. Ev nîşanek ji bikarhêner û serîlêdanên din ên li ser cîhaza bikarhêner re peyda dike. Ev celeb destûra destûrnameyê nasnameya serîlêdanê rast nake, û pêvajo bixwe xwe dispêre URLek beralîkirî (berê bi karûbarê re hatî tomar kirin).

Herikîna Implicit piştgirî nade nîşaneyên nûvekirina tokenê.

Herikîna Grant Kredentials Client - Dema ku serîlêdan gihîştina API-ê têne bikar anîn. Ev celeb destûrnameya destûrnameyê bi gelemperî ji bo danûstendinên server-to-server ku divê di paşperdeyê de bêyî danûstendina bikarhêner a tavilê were kirin tê bikar anîn. Herikîna dayîna pêbaweriyên xerîdar dihêle ku karûbarek webê (muwekîlê nepenî) li şûna ku bikarhênerek nas bike da ku dema gazî karûbarek din a tevneyê bike pêbaweriyên xwe bikar bîne. Ji bo astek astek bilindtir, mimkun e ku karûbarê bangê sertîfîkayek (li şûna razek hevpar) wekî pêbawer bikar bîne.

Taybetmendiya OAuth2 di nav de tête diyar kirin
RFC-6749
RFC-8252
RFC-6819

JWT token û feydeyên wê

JWT (JSON Web Token) standardek vekirî ye (https://tools.ietf.org/html/rfc7519), ku rêgezek tevlihev û xweser diyar dike ku bi ewlehî agahdariya di navbera partiyan de di forma tiştek JSON de veguhezîne.

Li gorî standardê, tokenek di forma bingehîn-64 de ji sê beşan pêk tê, ku bi xalan têne veqetandin. Beşa yekem jê re sernav tê gotin, ku tê de celebê token û navê algorîtmaya haş ji bo bidestxistina îmzeya dîjîtal heye. Beşa duyemîn agahdariya bingehîn (bikarhêner, taybetmendî, hwd.) hilîne. Beşa sêyemîn îmzeya dîjîtal e.

. .
Qet nîşanek di DB-ya xwe de hilînin. Ji ber ku nîşanek derbasdar bi şîfreyekê re wekhev e, hilanîna tokenê mîna hilanîna şîfreyê di nivîsek zelal de ye.
Token Access nîşanek e ku destûr dide xwediyê xwe bigihîje çavkaniyên servera ewle. Ew bi gelemperî jiyanek kurt heye û dibe ku agahdariya zêde wekî navnîşana IP-ya partiya ku tokenê daxwaz dike hilgire.

Refresh token nîşanek e ku dihêle xerîdar piştî ku emrê wan qediya, tokenên gihîştina nû daxwaz bikin. Van nîşanan bi gelemperî ji bo demek dirêj têne derxistin.

Feydeyên sereke yên karanîna di mîmariya mîkroservisê de:

  • Qabiliyeta gihîştina serîlêdan û karûbarên cihêreng bi pejirandina yek-carî.
  • Di nebûna hejmarek taybetmendiyên pêwîst di profîla bikarhêner de, gengaz e ku meriv bi daneyên ku dikarin li bargiraniyê werin zêdekirin, di nav de otomatîk û li ser-firînê de dewlemend bikin.
  • Ne hewce ye ku agahdariya di derbarê danişînên çalak de hilîne, serîlêdana serverê tenê pêdivî ye ku îmzeyê verast bike.
  • Kontrola gihîştina maqûltir bi navgîniya taybetmendiyên zêde yên di bargiraniyê de.
  • Bikaranîna nîşanek nîşanek ji bo sernav û bargiraniyê ewlehiya çareseriyê bi tevahî zêde dike.

JWT token - pêkhatin

Header - Ji hêla xwerû ve, sernav tenê celebê token û algorîtmaya ku ji bo şîfrekirinê tê bikar anîn dihewîne.

Cureyê tokenê di mifteya "typ" de tê hilanîn. Mifteya "typ" di JWT de paşguh kirin. Ger mifteya "typ" hebe, divê nirxa wê JWT be da ku destnîşan bike ku ev tişt JSON Web Token e.

Mifteya duyemîn "alg" algorîtmaya ku ji bo şîfrekirina tokenê tê bikar anîn diyar dike. Pêdivî ye ku ew ji hêla xwerû ve li HS256 were danîn. Sernivîs di base64 de tê kodkirin.

{"alg": "HS256", "type": "JWT"}
Payload (naveroka) - bargiran her agahdariya ku divê were kontrol kirin hilîne. Her kilîtek di bargiraniyê de wekî "îddîa" tê zanîn. Mînakî, hûn dikarin tenê bi vexwendinê (promoya girtî) têkevin serîlêdanê. Dema ku em dixwazin kesek vexwînin beşdariyê, em ji wan re nameya vexwendinê dişînin. Girîng e ku meriv kontrol bike ku navnîşana e-nameyê ya kesê ku vexwendinê qebûl dike ye, ji ber vê yekê em ê vê navnîşanê têxin nav bargiraniyê, ji bo vê yekê em wê di mifteya "e-name" de hilînin.

{"email": "[email parastî]"}

Keys di payload dikarin keyfî. Lêbelê, çend rezervan hene:

  • iss (Beşdar) - Serîlêdana ku token jê tê şandin destnîşan dike.
  • sub (Mijar) - mijara nîşanê diyar dike.
  • aud (Audience) rêzek rêzikên hesas ên dozê an URI-yan e ku navnîşek wergirên vê tokenê ye. Gava ku alîyê wergir JWT bi mifteya hatî dayîn werdigire, pêdivî ye ku ew hebûna xwe di wergiran de kontrol bike - wekî din nîşanê paşguh bike.
  • exp (Dema qedandinê) - Nîşan dide dema ku token diqede. Standarda JWT ji hemî pêkanînên wê hewce dike ku nîşaneyên qediyayî red bikin. Pêdivî ye ku mifteya exp di forma unix-ê de nîşanek dem be.
  • nbf (Ne Berê) demek di formata unix de ye ku dema derbasbûna token diyar dike.
  • iat (Li ser hat weşandin) - Ev kilît dema ku token hate derxistin destnîşan dike û dikare ji bo destnîşankirina temenê JWT were bikar anîn. Pêdivî ye ku mifteya iat di forma unix de nîşanek dem be.
  • Jti (JWT ID) - rêzikek ku nasnameya yekta ya vê tokenê, hesas-doze diyar dike.

Girîng e ku meriv fêhm bike ku bargiran bi şîfre nayê veguheztin (her çend nîşanek dikarin werin hêlîn kirin û wê hingê gengaz e ku daneyên şîfrekirî werin veguheztin). Ji ber vê yekê, hûn nikarin agahdariya veşartî tê de hilînin. Mîna sernavê, bargiraniya bingehîn 64 kodkirî ye.
Îmzekirin - dema ku sernav û bargiraniyek me hebe, em dikarin îmzeyê hesab bikin.

Base64-encoded: sernav û bargiran têne girtin, ew di nav xalek de di nav rêzek de têne hev kirin. Dûv re ev rêzik û mifteya nehênî têkevin algorîtmaya şîfrekirinê ya ku di serî de (kilît "alg") hatî destnîşan kirin. Mift dikare her têl be. Têlên dirêjtir dê herî zêde bêne tercîh kirin ji ber ku hilgirtina wê dirêjtir bigire.

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

Avakirina Keycloak Failover Cluster Architecture

Dema ku ji bo hemî projeyan komek yekane bikar tînin, ji bo çareseriya SSO hewcedariyên zêde hene. Gava ku hejmara projeyan hindik be, ev hewcedarî ji bo hemî projeyan ew qas ne diyar in, di heman demê de, bi zêdebûna hejmara bikarhêner û entegrasyonê re, hewcedariyên hebûna û performansê zêde dibin.

Zêdekirina xetereya têkçûna yekane ya SSO hewcedariyên mîmariya çareseriyê û rêbazên ku ji bo pêkhateyên zêde têne bikar anîn zêde dike û dibe sedema SLAyek pir teng. Di vî warî de, pir caran di dema pêşkeftin an qonaxên destpêkê yên bicihanîna çareseriyan de, projeyan binesaziya xwe ya ne-tehemûlê xeletiyê heye. Her ku pêşveçûn pêşve diçe, pêdivî ye ku ji bo pêşkeftin û pîvandinê fersend werin danîn. Pir maqûl e ku meriv komikek têkçûyî bi karanîna virtualîzasyona konteyneran an nêzîkatiyek hybrid ava bike.

Ji bo ku di modên komê yên Çalak / Çalak û Çalak / Pasîf de bixebitin, pêdivî ye ku meriv lihevhatina daneyê di databasek pêwendiyê de piştrast bike - pêdivî ye ku her du girêkên databasê bi hevdemî di navbera navendên danûstendinê yên cihêreng ên jeo-belavbûyî de bêne dubare kirin.

Mînaka herî hêsan a sazkirina xelet-tolerant.

SSO li ser mîmariya microservice. Em Keycloak bikar tînin. Beş #1

Feydeyên karanîna yek komê çi ne:

  • Hebûna bilind û performansa.
  • Piştgiriya modên xebitandinê: Çalak / Çalak, Çalak / Pasîf.
  • Qabiliyeta pîvandina dînamîkî - dema ku virtualbûna konteynerê bikar tînin.
  • Îhtîmala rêvebirin û çavdêriya navendî.
  • Nêzîkatiya yekgirtî ji bo nasname / rastkirin / destûrdana bikarhêneran di projeyan de.
  • Têkiliya zelaltir di navbera projeyên cihêreng de bêyî tevlêbûna bikarhêner.
  • Kapasîteya ji nû ve karanîna token JWT di projeyên cihêreng de.
  • Yek xala baweriyê.
  • Zûtir destpêkirina projeyan bi karanîna mîkroservisên / virtualîzasyona konteyner bikar tînin (ne hewce ye ku hêmanên zêde rakin û mîheng bikin).
  • Mimkun e ku meriv piştgiriya bazirganî ji firoşker bikire.

Dema Plankirina Klusterê Li Çi Bigerin

DBMS

Keycloak pergalek rêveberiya DBMS bikar tîne da ku hilîne: warên, xerîdar, bikarhêner, hwd.
Rêjeyek berfireh a DBMS piştgirî ye: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak bi databasa pêwendiya xweya çêkirî tê. Tête pêşniyar kirin ku ji bo hawîrdorên ne-barkirî - wekî hawirdorên pêşveçûnê bikar bînin.

Ji bo ku di modên komê yên Çalak / Çalak û Çalak / Pasîf de bixebitin, pêdivî ye ku meriv lihevhatina daneyê di databasa têkildar de piştrast bike û her du girêkên koma databasê bi hevdemî di navbera navendên daneyê de têne dubare kirin.

Cacheya belavkirî (Infinspan)

Ji bo ku kom bi rêkûpêk bixebite, hevdemkirina zêde ya celebên cache yên jêrîn bi karanîna Tora Daneyên JBoss hewce ye:

Danişînên erêkirinê - ji bo hilanîna daneyan dema ku bikarhênerek taybetî piştrast dike tê bikar anîn. Daxwazên ji vê cache-ê bi gelemperî tenê gerok û servera Keycloak, ne serîlêdanê, vedihewîne.

Nîşaneyên çalakiyê ji bo senaryoyên ku pêdivî ye ku bikarhêner çalakiyek asynchronously (bi e-nameyê) piştrast bike, têne bikar anîn. Mînakî, di dema herikîna şîfreyek ji bîrkirinê de, cache actionTokens Infinispan tê bikar anîn da ku metadata li ser tokenên çalakiya têkildar ên ku berê hatine bikar anîn bişopîne, ji ber vê yekê ew nikare ji nû ve were bikar anîn.

Veşartin û betalkirina daneyên domdar - ji bo cachekirina daneya domdar tê bikar anîn da ku ji lêpirsînên nepêwist ji databasê dûr bikevin. Dema ku serverek Keycloak daneyê nûve dike, hemî serverên Keycloak ên din ên li hemî navendên daneyê hewce ne ku li ser wê zanibin.

Kar - Tenê ji bo şandina peyamên betalkirinê di navbera girêkên komê û navendên daneyê de tê bikar anîn.

Danişînên bikarhêner - ji bo hilanîna daneyên derheqê danişînên bikarhêner ên ku ji bo dema rûniştina geroka bikarhêner derbasdar in têne bikar anîn. Pêdivî ye ku cache daxwazên HTTP-ê yên ji bikarhênerê dawî û serîlêdanê bişopîne.

Parastina hêza hov - ji bo şopandina daneyên di derheqê têketinên têkçûyî de tê bikar anîn.

hevsengkirina barkirinê

Balansa barkirinê xala yekane ya têketina keycloak-ê ye û pêdivî ye ku danişînên asê piştgirî bike.

Pêşkêşkerên Serlêdanê

Ew ji bo kontrolkirina danûstendina pêkhateyan bi hev û din re têne bikar anîn û dikarin bi karanîna amûrên otomasyona heyî û pîvandina dînamîkî ya amûrên otomasyona binesaziyê ve virtual an konteynir bibin. Senaryoyên bicîhkirina herî gelemperî li OpenShift, Kubernates, Rancher.

Ev beşa yekem - ya teorîk bi dawî dike. Di rêza gotaran de dê mînakên entegrasyonê bi pêşkêşkerên nasnameyên cihêreng û mînakên mîhengan re werin analîz kirin.

Source: www.habr.com

Add a comment