SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

K'hamphaning efe kapa efe e kholo, le X5 Retail Group ha ho mokhelo, ha e ntse e tsoela pele, palo ea merero e hlokang tumello ea mosebelisi ea eketseha. Ha nako e ntse e ea, ho hlokahala phetoho e se nang moeli ea basebelisi ho tloha ho sesebelisoa se seng ho ea ho se seng, 'me joale ho hlokahala hore ho sebelisoe seva se le seng sa Single-Sing-On (SSO). Empa ho thoe'ng ha bafani ba boitsebiso ba kang AD kapa ba bang ba se nang litšobotsi tse eketsehileng ba se ba ntse ba sebelisoa mererong e fapaneng. Sehlopha sa litsamaiso se bitsoang "identification brokers" se tla thusa. Tse sebetsang ka ho fetisisa ke baemeli ba eona, joalo ka Keycloak, Gravitee Access management, joalo-joalo Hangata, linyeoe tsa tšebeliso li ka ba tse fapaneng: ho sebelisana ha mochine, ho kenya letsoho ha basebelisi, joalo-joalo Tharollo e tlameha ho tšehetsa ts'ebetso e feto-fetohang le e tsitsitseng e ka kopanyang litlhoko tsohle ho e le 'ngoe, le litharollo tse joalo k'hamphani ea rona joale e na le sesupo sa broker - Keycloak.

SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

Keycloak ke boitsebiso ba mohloli o bulehileng le sehlahisoa sa taolo ea phihlello se bolokiloeng ke RedHat. Ke motheo oa lihlahisoa tsa k'hamphani tse sebelisang SSO - RH-SSO.

Lintlha tsa motheo

Pele o qala ho sebetsana le litharollo le mekhoa, o lokela ho etsa qeto ho latela maemo le tatellano ea lits'ebetso:

SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

Boitsebiso ke mokhoa oa ho lemoha taba ka moemeli oa hae (ka mantsoe a mang, ena ke tlhaloso ea lebitso, ho kena kapa nomoro).

Netefatso - ena ke ts'ebetso ea netefatso (mosebelisi o hlahlojoa ka senotlolo, lengolo le hlahlojoa ka signature ea elektroniki, jj.)

Tlhahiso - ena ke tokisetso ea ho fumana mohloli (mohlala, ho e-mail).

Identity Broker Keycloak

kobo ea senotlolo ke mohloli o bulehileng oa boitsebiso le tharollo ea taolo ea phihlello e etselitsoeng ho sebelisoa ho IS moo mekhoa ea meralo ea microservice e ka sebelisoang.

Keycloak e fana ka likarolo tse kang ho saena ha motho a le mong (SSO), boitsebiso bo arotsoeng le ho kena sechabeng, mokhatlo oa basebelisi, li-adapter tsa bareki, console ea admin le console ea tsamaiso ea akhaonto.

Ts'ebetso ea mantlha e tšehetsoeng ke Keycloak:

  • Kena ha U le Mong 'me u Tsoe ha U le Mong bakeng sa lits'ebetso tsa sebatli.
  • Tšehetso bakeng sa OpenID/OAuth 2.0/SAML.
  • Identity Brokering - netefatso ka ho sebelisa OpenID Connect ea kantle kapa bafani ba boitsebiso ba SAML.
  • Ho kena sechabeng - Google, GitHub, Facebook, Twitter tšehetso bakeng sa boitsebiso ba basebelisi.
  • User Federation - khokahano ea basebelisi ho tsoa ho LDAP le li-server tsa Active Directory le bafani ba bang ba boitsebiso.
  • Borokho ba Kerberos - ho sebelisa seva ea Kerberos bakeng sa netefatso ea basebelisi ba othomathike.
  • Admin Console - bakeng sa taolo e kopaneng ea litlhophiso le likhetho tsa tharollo ka Web.
  • Account Management Console - bakeng sa ho itaola profil ea mosebelisi.
  • Ho iketsetsa tharollo ho ipapisitse le boitsebiso ba k'hamphani.
  • 2FA Netefatso - tšehetso ea TOTP/HOTP ka Google Authenticator kapa FreeOTP.
  • Phallo ea ho Kena - ho ingolisa ka mosebelisi, ho khutlisa phasewete le ho seta bocha, le tse ling lia khoneha.
  • Tsamaiso ea Session - batsamaisi ba ka tsamaisa linako tsa basebelisi ho tloha ntlheng e le 'ngoe.
  • Limmapa tsa Token - litšoaneleho tsa mosebelisi tse tlamang, mesebetsi le litšobotsi tse ling tse hlokahalang ho li-tokens.
  • Taolo ea maano e feto-fetohang ho pholletsa le libaka, ts'ebeliso le basebelisi.
  • Ts'ehetso ea CORS - Li-adapter tsa bareki li na le tšehetso ea CORS e hahelletsoeng.
  • Li-Service Provider Interfaces (SPI) - Palo e kholo ea li-SPI tse u lumellang hore u iketsetse likarolo tse fapaneng tsa seva: phallo ea netefatso, bafani ba boitsebiso, 'mapa oa protocol, le tse ling.
  • Li-adapter tsa bareki bakeng sa lits'ebetso tsa JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Tšehetso ea ho sebetsa ka likopo tse fapaneng tse tšehetsang laeborari ea OpenID Connect Relying Party kapa SAML 2.0 Service Provider Library.
  • E ka atolosoa ka ho sebelisa li-plugins.

Bakeng sa lits'ebetso tsa CI / CD, hammoho le ts'ebetso ea othomathike ea tsamaiso ho Keycloak, REST API / JAVA API e ka sebelisoa. Litokomane li fumaneha ka mokhoa oa elektroniki:

LING 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

Bafani ba Boitsebiso ba Khoebo (On-Premise)

Bokhoni ba ho netefatsa basebelisi ka lits'ebeletso tsa User Federation.

SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

Netefatso ea Pass-through le eona e ka sebelisoa - haeba basebelisi ba netefatsa khahlano le liteishene tsa mosebetsi ka Kerberos (LDAP kapa AD), joale ba ka netefatsoa ka bo bona ho Keycloak ntle le ho kenya lebitso la bona la mosebelisi le password hape.

Bakeng sa netefatso le tumello e eketsehileng ea basebelisi, hoa khoneha ho sebelisa DBMS e amanang le eona, e sebetsang ka ho fetisisa bakeng sa libaka tsa nts'etsopele, kaha ha e kenyelle litlhophiso tse telele le ho kopanya mekhahlelo ea pele ea merero. Ka ho sa feleng, Keycloak e sebelisa DBMS e hahelletsoeng ho boloka litlhophiso le data ea mosebelisi.

Lethathamo la DBMS e tšehelitsoeng le pharalletse ebile le kenyelletsa: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle le tse ling. Tse lekiloeng ka ho fetisisa ho fihlela joale ke Oracle 12C Release1 RAC le Galera 3.12 cluster bakeng sa MariaDB 10.1.19.

Bafani ba boitsebiso - ho kena sechabeng

Hoa khoneha ho sebelisa ho kena ho tloha marang-rang a sechaba. Ho kenya tšebetsong bokhoni ba ho netefatsa basebelisi, sebelisa konopo ea admin ea Keyclock. Liphetoho tsa khoutu ea kopo ha li hlokehe mme ts'ebetso ena e fumaneha ka ntle ho lebokose mme e ka etsoa sethaleng leha e le sefe sa morero.

SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

Hoa khonahala ho sebelisa bafani ba Boitsebiso ba OpenID/SAML bakeng sa netefatso ea basebelisi.

Maemo a tloaelehileng a tumello a sebelisa OAuth2 ho Keycloak

Phallo ea Khoutu ea tumello - e sebelisoa le lits'ebetso tse lehlakoreng la seva. E 'ngoe ea mefuta e atileng haholo ea tumello ea tumello hobane e loketse lits'ebetso tsa seva moo khoutu ea mohloli oa kopo le data ea bareki li sa fumaneheng ho batho ba kantle. Ts'ebetso tabeng ena e thehiloe ho redirection. Kopo e tlameha ho khona ho buisana le moemeli oa mosebelisi (moemeli oa mosebelisi), joalo ka sebatli sa marang-rang - ho fumana likhoutu tsa tumello ea API tse tsamaisoang ke mosebelisi.

phallo e se nang boikemelo - e sebelisoang ke lisebelisoa tsa mohala kapa tsa marang-rang (lisebelisoa tse sebelisang sesebelisoa sa mosebelisi).

Mofuta oa tumello ea tumello o sebelisoang ka mokhoa o hlakileng o sebelisoa ke lisebelisoa tsa mohala le tsa marang-rang moo ho ke keng ha tiisetsoa lekunutu la bareki. Mofuta oa tumello o hlakileng o boetse o sebelisa mokhoa oa ho tsamaisa moemeli, moo tokene ea phihlello e fetisetsoang ho mosebelisi bakeng sa ts'ebeliso e eketsehileng ts'ebelisong. Sena se etsa hore tokene e fumanehe ho mosebelisi le lits'ebetso tse ling sesebelisoa sa mosebelisi. Mofuta ona oa tumello ea tumello ha o netefatse boitsebiso ba kopo, 'me ts'ebetso ka boeona e itšetlehile ka URL e tsamaisang sebaka se seng (e neng e ngolisitsoe pele le tšebeletso).

Implicit Flow ha e tšehetse li-tokens tsa ho nchafatsa li-tokens.

Phallo ea Litlhaloso tsa Bareki - li sebelisoa ha sesebelisoa se fihlella API. Mofuta ona oa tumello ea tumello o sebelisoa hangata bakeng sa litšebelisano tsa seva le seva tse tlamehang ho etsoa ka morao ntle le ho sebelisana hanghang le basebelisi. Phallo ea mangolo a tumello ea bareki e lumella tšebeletso ea tepo (mosebetsi oa lekunutu) ho sebelisa mangolo a eona ho e-na le ho iketsa mosebelisi ho netefatsa ha a letsetsa tšebeletso e 'ngoe ea tepo. Bakeng sa boemo bo phahameng ba tšireletso, hoa khoneha hore tšebeletso ea ho letsetsa e sebelise setifikeiti (ho e-na le sephiri se arolelanoeng) e le bopaki.

Litlhaloso tsa OAuth2 li hlalositsoe ho
EA-6749-RF
EA-8252-RF
EA-6819-RF

Letšoao la JWT le melemo ea lona

JWT (JSON Web Token) ke tekanyetso e bulehileng (https://tools.ietf.org/html/rfc7519) e hlalosang mokhoa o kopanetsoeng le o ikemetseng oa ho fetisetsa boitsebiso ka mokhoa o sireletsehileng pakeng tsa lihlopha e le ntho ea JSON.

Ho latela maemo, lets'oao le na le likarolo tse tharo ka sebopeho sa base-64, se arotsoeng ke matheba. Karolo ea pele e bitsoa hlooho, e nang le mofuta oa letšoao le lebitso la algorithm ea hash bakeng sa ho fumana signature ea digital. Karolo ea bobeli e boloka lintlha tsa motheo (mosebelisi, litšoaneleho, joalo-joalo). Karolo ea boraro ke signature ea digital.

. .
Le ka mohla u se ke ua boloka letšoao ho DB ea hau. Kaha lets'oao le nepahetseng le lekana le senotlolo, ho boloka lets'oao ho tšoana le ho boloka password ka mongolo o hlakileng.
Letšoao la ho fihlella ke lets'oao le fang mong'a eona monyetla oa ho fumana mehloli e sireletsehileng ea seva. Hangata e na le nako e khuts'oane ea bophelo 'me e ka ba le lintlha tse ling joalo ka aterese ea IP ea moketjana ea batlang letšoao.

Letšoao la ho nchafatsa ke lets'oao le lumellang bareki ho kopa li-tokens tse ncha tsa phihlello kamora hore nako ea bophelo ba bona e felle. Li-tokens tsena hangata li fanoa ka nako e telele.

Melemo ea mantlha ea ho sebelisa meralo ea microservice:

  • Bokhoni ba ho fihlella lits'ebetso le lits'ebeletso tse fapaneng ka netefatso ea nako e le 'ngoe.
  • Ha ho se na litšoaneleho tse 'maloa tse hlokahalang profaeleng ea mosebelisi, hoa khoneha ho ntlafatsa ka data e ka eketsoang ho mojaro oa moputso, ho kenyeletsoa othomathike le o fofang.
  • Ha ho na tlhoko ea ho boloka tlhahisoleseling mabapi le linako tse sebetsang, sesebelisoa sa seva se hloka feela ho netefatsa ho saena.
  • Taolo ea phihlello e feto-fetohang ka litšoaneleho tse ling tsa mojaro oa moputso.
  • Tšebeliso ea lets'oao la lets'oao bakeng sa hlooho le moputso o eketsa ts'ireletso ea tharollo ka kakaretso.

Letšoao la JWT - sebopeho

Sehlooho - ka ho sa feleng, hlooho e na le mofuta oa token feela le algorithm e sebelisetsoang ho kenyelletsa.

Mofuta oa letšoao o bolokoa ka konopo ea "typ". Senotlolo sa 'mofuta' ha se na taba ho JWT. Haeba konopo ea "typ" e le teng, boleng ba eona e tlameha ho ba JWT ho bontša hore ntho ena ke JSON Web Token.

Senotlolo sa bobeli "alg" se hlalosa algorithm e sebelisoang ho patala letšoao. E lokela ho hlophisoa ho HS256 ka ho sa feleng. Sehlooho se kentsoe ka har'a base64.

{ "alg": "HS256", "type": "JWT"}
mojaro (liteng) - moputso o boloka tlhahisoleseling efe kapa efe e hlokang ho hlahlojoa. Senotlolo se seng le se seng sa mojaro oa moputso se tsejoa e le "tleleime". Mohlala, o ka kenya ts'ebeliso feela ka memo (promo e koetsoeng). Ha re batla ho mema motho hore a be le seabo, re mo romella lengolo la memo. Ho bohlokoa ho hlahloba hore na aterese ea lengolo-tsoibila ke ea motho ea amohelang memo, ka hona re tla kenyelletsa aterese ena mokotleng oa moputso, hobane re e boloka ka konopo ea "imeile".

{"imeile": "[imeile e sirelelitsoe]"}

Linotlolo tsa mojaro oa moputso li ka ba tsa boikhethelo. Leha ho le joalo, ho na le tse seng kae tse bolokiloeng:

  • iss (Mohlahisi) - E hlwaya kopo eo letshwao le romelwang ho yona.
  • sub (Sehlooho) - e hlalosa taba ea lets'oao.
  • aud (Bamameli) ke letoto la likhoele tse sa utloeng bohloko kapa li-URI tseo e leng lenane la ba amohelang letšoao lena. Ha lehlakore le amohelang le amohela JWT ka senotlolo se fanoeng, le tlameha ho hlahloba boteng ba lona ho baamoheli - ho seng joalo le hlokomolohe letšoao.
  • exp (Nako ea ho Felloa ke Nako) - E bontša ha lets'oao le felile. Tekanyetso ea JWT e hloka hore ts'ebetsong eohle ea eona e hane li-tokens tse felletsoeng ke nako. Senotlolo sa exp e tlameha ho ba setempe sa nako ka sebopeho sa unix.
  • nbf (Not Before) ke nako ka sebopeho sa unix se khethollang nako eo letšoao le sebetsang ka eona.
  • iat (E ntšitsoe At) - Senotlolo sena se emela nako eo tokene e fanoeng ka eona mme e ka sebelisoa ho tseba lilemo tsa JWT. Senotlolo sa iat e tlameha ho ba setempe sa nako ka sebopeho sa unix.
  • Jti (ID ea JWT) - khoele e hlalosang sekhetho se ikhethileng sa tokeneng ena, se sa tsotelleng linyeoe.

Ho bohlokoa ho utloisisa hore moputso ha o fetisoe ka mokhoa o patiloeng (le hoja li-tokens li ka beoa sehlaheng 'me joale ho ka khoneha ho fetisetsa data e patiloeng). Ka hona, e ke ke ea boloka boitsebiso leha e le bofe ba lekunutu. Joalo ka hlooho, moputso o kentsoeng ke base64.
Letšoao - ha re e-na le sehlooho le moputso, re ka bala ho saena.

Base64-encoded: hlooho le moputso li nkoa, li kopantsoe ka khoele ka letheba. Joale khoele ena le senotlolo sa lekunutu li kenngoa ho algorithm ea encryption e boletsoeng sehloohong (senotlolo sa "alg"). Senotlolo e ka ba khoele efe kapa efe. Likhoele tse telele li tla ratoa haholo kaha ho tla nka nako e telele ho nka.

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

Ho haha ​​​​Mohaho oa Keycloak Failover Cluster Architecture

Ha u sebelisa sehlopha se le seng bakeng sa merero eohle, ho na le litlhoko tse eketsehileng bakeng sa tharollo ea SSO. Ha palo ea merero e le nyane, litlhoko tsena ha li hlokomelehe bakeng sa merero eohle, leha ho le joalo, ka keketseho ea palo ea basebelisi le ho kopanya, litlhoko tsa ho fumaneha le ho eketseha ha ts'ebetso.

Ho eketsa kotsi ea ho hlōleha ha SSO e le 'ngoe ho eketsa litlhoko tsa meralo ea tharollo le mekhoa e sebelisoang bakeng sa likarolo tse sa hlokahaleng le ho lebisa ho SLA e thata haholo. Tabeng ena, hangata nakong ea nts'etsopele kapa mehato ea pele ea ho kenya ts'ebetsong tharollo, merero e na le lisebelisoa tsa eona tse sa mamelleng liphoso. Ha nts'etsopele e ntse e tsoela pele, ho hlokahala hore ho behoe menyetla ea ntlafatso le ho hola. Ho bonolo ka ho fetisisa ho haha ​​​​sehlopha sa failover ho sebelisa virtualization ea setshelo kapa mokhoa oa lebasetere.

Ho sebetsa ka mekhoa ea "Active/Active and Active/Passive cluster", hoa hlokahala ho netefatsa ts'ebetso ea ts'ebetso ea data sebakeng sa polokelo ea likamano - li-database tsa libaka ka bobeli li tlameha ho kopitsoa ka mokhoa o ts'oanang lipakeng tsa litsi tse fapaneng tsa data tse ajoang.

Mohlala o bonolo ka ho fetisisa oa ho kenya ts'ebetsong ea ho mamella liphoso.

SSO mabapi le meralo ea microservice. Re sebelisa Keycloak. Karolo #1

Melemo ea ho sebelisa sehlopha se le seng ke efe:

  • Ho fumaneha ho phahameng le tshebetso.
  • Ts'ehetso bakeng sa mekhoa ea ts'ebetso: E sebetsang / E sebetsang, E sebetsang / E sa Feleng.
  • Bokhoni ba ho lekanya ka matla - ha u sebelisa virtualization ea setshelo.
  • Monyetla oa tsamaiso le tlhokomelo e bohareng.
  • Mokhoa o kopaneng oa ho tsebahatsa / netefatso / tumello ea basebelisi mererong.
  • Tšebelisano e pepeneneng lipakeng tsa merero e fapaneng ntle le ho kenya letsoho ha basebelisi.
  • Bokhoni ba ho sebelisa lets'oao la JWT hape mererong e fapaneng.
  • Ntlha e le 'ngoe ea tšepo.
  • Ho qala ka potlako ha merero e sebelisang li-microservices / container virtualization (ha ho hlokahale ho phahamisa le ho lokisa likarolo tse ling).
  • Hoa khoneha ho reka tšehetso ea khoebo ho morekisi.

Seo U Lokelang ho se Sheba Ha U Rala Sehlopha

DBMS

Keycloak e sebelisa sistimi ea taolo ea database ho boloka: libaka, bareki, basebelisi, jj.
Mefuta e mengata ea DBMS e tšehetsoa: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak e tla le database ea eona e hahelletsoeng kahare. Ho kgothaletswa hore o sebedise bakeng sa ditikoloho tse sa jareheng - tse kang dibaka tsa ntshetsopele.

Ho sebetsa ka mekhoa ea "Active / Active" le "Passive cluster" hoa hlokahala ho netefatsa ho ts'oara data sebakeng sa polokelo ea litaba, 'me li-database tsa cluster node ka bobeli li kopitsoa ka mokhoa o lumellanang pakeng tsa litsi tsa data.

Cache e phatlalalitsoeng (Infinspan)

Hore sehlopha se sebetse ka nepo, ho hlokahala khokahano e eketsehileng ea mefuta e latelang ea li-cache e sebelisang JBoss Data Grid:

Linako tsa netefatso - tse sebelisoang ho boloka data ha ho netefatsoa mosebelisi ea itseng. Likopo tse tsoang ho cache ena hangata li kenyelletsa sebatli le seva sa Keycloak, eseng sesebelisoa.

Li-tokens tsa ketso li sebelisoa bakeng sa maemo ao mosebelisi a hlokang ho netefatsa ketso ka mokhoa o lumellanang (ka lengolo-tsoibila). Ka mohlala, nakong ea phallo ea phasewete ea ho lebala, cache ea actionTokens Infinispan e sebelisoa ho boloka tlaleho ea metadata mabapi le li-tokens tsa liketso tse amanang tse seng li sebelisitsoe, kahoo e ke ke ea sebelisoa hape.

Ho boloka le ho se sebetse ha data e sa khaotseng - e sebelisetsoang ho boloka boitsebiso bo tsitsitseng ho qoba lipotso tse sa hlokahaleng ho database. Ha seva efe kapa efe ea Keycloak e ntlafatsa data, li-server tse ling tsohle tsa Keycloak litsing tsohle tsa data li hloka ho tseba ka eona.

Mosebetsi - E sebelisoa feela ho romella melaetsa e fosahetseng lipakeng tsa li-cluster node le litsi tsa data.

Linako tsa basebelisi - tse sebelisoang ho boloka lintlha tse mabapi le linako tsa mosebelisi tse sebetsang nako eohle ea seshene sa mosebelisi. Cache e tlameha ho sebetsana le likopo tsa HTTP ho tsoa ho mosebelisi oa ho qetela le ts'ebeliso.

Tšireletso ea matla a Brute - e sebelisetsoang ho latela lintlha tse mabapi le li-logins tse hlōlehileng.

Ho leka-lekanya mojaro

Selekanyi sa mojaro ke sebaka se le seng sa ho kena ho keycloak 'me se tlameha ho tšehetsa linako tse khomarelang.

Lisebelisoa tsa lisebelisoa

Li sebelisetsoa ho laola tšebelisano ea likarolo tse ling 'me li ka ntlafatsoa kapa tsa kenngoa ka har'a lisebelisoa ho sebelisoa lisebelisoa tse teng tsa othomathike le sekhahla se matla sa lisebelisoa tsa boiketsetso tsa meaho. Maemo a atileng haholo a ho romelloa ho OpenShift, Kubernates, Rancher.

Sena se phethela karolo ea pele - ea theory. Letotong le latelang la lingoliloeng, ho tla hlahlojoa mehlala ea likhokahano le bafani ba boitsebahatso ba fapaneng le mehlala ea litlhophiso.

Source: www.habr.com

Eketsa ka tlhaloso