SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Na nnukwu ụlọ ọrụ ọ bụla, yana X5 Retail Group abụghị ihe dị iche, ka ọ na-etolite, ọnụ ọgụgụ ọrụ ndị chọrọ ikike onye ọrụ na-abawanye. Ka oge na-aga, a na-achọ mgbanwe na-enweghị nkebi nke ndị ọrụ site n'otu ngwa gaa na nke ọzọ, mgbe ahụ enwere mkpa iji otu sava Single-Sing-On (SSO). Mana kedu maka mgbe ejirila ndị na-enye njirimara dị ka AD ma ọ bụ ndị ọzọ na-enweghị ihe mgbakwunye na ọrụ dị iche iche. Otu klas nke sistemụ akpọrọ "ndị na-ere ahịa njirimara" ga-abịa napụta. Ndị kasị arụ ọrụ bụ ndị nnọchiteanya ya, dị ka Keycloak, Gravitee Access management, wdg Ọtụtụ mgbe, ojiji ikpe nwere ike dị iche iche: igwe mmekọrịta, ọrụ òkè, wdg Ngwọta ga-akwado mgbanwe na scalable ọrụ nke nwere ike ikpokọta niile chọrọ n'ime otu. na ngwọta ndị dị otú ahụ ụlọ ọrụ anyị nwere ugbu a ihe na-egosi na-ere ahịa - Keycloak.

SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Keycloak bụ njirimara isi mmalite mepere emepe yana ngwaahịa njikwa ohere nke RedHat na-echekwa. Ọ bụ ihe ndabere maka ngwaahịa ụlọ ọrụ na-eji SSO - RH-SSO.

Echiche ndị bụ isi

Tupu ịmalite ime ihe ngwọta na ụzọ, ị kwesịrị ikpebi na usoro na usoro nke usoro:

SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Nchọpụta bụ usoro maka ịmata isiokwu site na njirimara ya (n'okwu ndị ọzọ, nke a bụ nkọwa nke aha, nbanye ma ọ bụ nọmba).

Nyocha - Nke a bụ usoro nyocha (a na-akwado onye ọrụ site na iji paswọọdụ, a na-enyocha akwụkwọ ozi ahụ site na iji mbinye aka elektrọnik, wdg)

Ikike - na-enye ohere ịnweta akụrụngwa (dịka ọmụmaatụ, email).

Igodo mkpuchi nke Broker

Uwe mkpuchi bụ njirimara mepere emepe yana ngwọta njikwa ohere emebere maka ojiji na IS ebe enwere ike iji ụkpụrụ ụlọ ọrụ microservice.

Keycloak na-enye atụmatụ dị ka otu nbanye (SSO), njirimara brokered na nbanye mmadụ, ngalaba onye ọrụ, ihe nkwụnye ndị ahịa, njikwa njikwa na njikwa akaụntụ.

Isi ọrụ Keycloak kwadoro:

  • Otu-Nbanye na otu-Nbanye maka ngwa ihe nchọgharị.
  • Nkwado OpenID/OAuth 2.0/SAML.
  • Brokering njirimara - nyocha site na iji njikọ OpenID mpụga ma ọ bụ ndị na-eweta njirimara SAML.
  • Nbanye mmekọrịta - Google, GitHub, Facebook, Twitter nkwado maka njirimara onye ọrụ.
  • Federation User – mmekọrịta nke ndị ọrụ sitere na sava LDAP na Active Directory na ndị na-eweta njirimara ndị ọzọ.
  • Kerberos àkwà mmiri - iji sava Kerberos maka njirimara onye ọrụ akpaka.
  • Console Admin - maka njikwa otu ntọala yana nhọrọ ngwọta site na Weebụ.
  • Console njikwa akaụntụ - maka njikwa onwe nke profaịlụ onye ọrụ.
  • Nhazi nke ngwọta dabere na njirimara ụlọ ọrụ nke ụlọ ọrụ ahụ.
  • Nyocha 2FA - Nkwado TOTP/HOTP site na iji Google Authenticator ma ọ bụ FreeOTP.
  • Nbanye nbanye - ndebanye aha onye ọrụ, mgbake na nrụpụta okwuntughe, yana ndị ọzọ ga-ekwe omume.
  • Njikwa Oge - ndị nchịkwa nwere ike ijikwa oge onye ọrụ site n'otu ebe.
  • Token Mappers – ijikọ njirimara, ọrụ na njirimara ndị ọzọ achọrọ n'ime token.
  • Njikwa amụma mgbanwe n'ofe mpaghara, ngwa na ndị ọrụ.
  • Nkwado CORS - Ihe nkwụnye ndị ahịa nwere nkwado CORS arụnyere n'ime ya.
  • Interface Onye na-enye ọrụ (SPI) - Ọnụ ọgụgụ buru ibu nke SPI na-enye gị ohere ịhazi akụkụ dị iche iche nke ihe nkesa: ntinye nyocha, ndị na-enye njirimara, nhazi usoro, na ndị ọzọ.
  • Ihe nkwụnye ndị ahịa maka ngwa JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Nkwado maka iji ngwa dị iche iche na-arụ ọrụ na-akwado ọba akwụkwọ OpenID Connect Relying Party ma ọ bụ SAML 2.0 Service Provider.
  • Enwere ike ịgbasawanye site na iji plugins.

Maka usoro CI / CD, yana akpaaka nke usoro njikwa na Keycloak, enwere ike iji REST API / JAVA API. Akwụkwọ dị na eletrọnịkị:

fọduru 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

Ndị na-enye njirimara ụlọ ọrụ (N'ime ụlọ)

Ikike ịchọpụta ndị ọrụ site na ọrụ Federation User.

SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Enwere ike iji nyocha ngafe - ọ bụrụ na ndị ọrụ ejiri Kerberos (LDAP ma ọ bụ AD) kwenye na ọdụ ọrụ, mgbe ahụ enwere ike igosipụta ha ozugbo na Keycloak na-enweghị itinye aha njirimara na paswọọdụ ha ọzọ.

Maka nkwenye na ikike ọzọ nke ndị ọrụ, ọ ga-ekwe omume iji DBMS mmekọrịta, nke kachasị mma maka gburugburu mmepe, ebe ọ bụ na ọ naghị agụnye ogologo ntọala na ntinye aka na mmalite nke ọrụ. Site na ndabara, Keycloak na-eji DBMS arụnyere n'ime ya iji chekwaa ntọala yana data onye ọrụ.

Ndepụta DBMS akwadoro buru ibu yana gụnyere: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle na ndị ọzọ. Ndị kacha nwalere ugbu a bụ Oracle 12C Release1 RAC na ụyọkọ Galera 3.12 maka MariaDB 10.1.19.

Ndị na-enye njirimara - nbanye mmekọrịta

Ọ ga-ekwe omume iji nbanye sitere na netwọk mmekọrịta. Iji mee ka ikike nyochaa ndị ọrụ, jiri Keycloack admin console. Achọghị mgbanwe na koodu ngwa yana ọrụ a dị na igbe ma enwere ike ịgbalite ya n'oge ọ bụla nke ọrụ ahụ.

SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Enwere ike iji OpenID/SAML na-eweta njirimara maka njirimara onye ọrụ.

Ụdị ihe ngosi ikike na-ejikarị OAuth2 na Keycloak

Usoro Usoro ikike - eji ngwa n'akụkụ nkesa. Otu n'ime ụdị ikike ikike a na-ahụkarị n'ihi na ọ dabara nke ọma maka ngwa nkesa ebe koodu isi mmalite na data ndị ahịa na-anọghị maka ndị si mba ọzọ. Usoro na nke a dabeere na redirection. Ngwa a ga-enwerịrị ike iso onye ọrụ (onye ọrụ-onye ọrụ), dị ka ihe nchọgharị wee nwee ike ịkparịta ụka - iji nweta koodu ikike API ebugara site n'aka onye ọrụ.

Na-aga nke ọma - ngwa mkpanaka ma ọ bụ webụ na-eji (ngwa na-agba na ngwaọrụ onye ọrụ).

A na-eji ụdị ikike ezoro ezo site na mkpanaka na ngwa weebụ ebe enweghị ike ịkwenye nzuzo onye ahịa. Ụdị ikike ahụ ezoro ezo na-ejikwa redirection onye ọrụ, ebe a na-enyefe akara ohere n'aka onye ọrụ maka iji ọzọ na ngwa ahụ. Nke a na-eme ka token dị maka onye ọrụ yana ngwa ndị ọzọ na ngwaọrụ onye ọrụ. Ụdị ikike ikike a anaghị egosipụta njirimara nke ngwa ahụ, yana usoro ahụ n'onwe ya dabere na URL redirect (edenyere aha ya na mbụ).

Ntugharị ezoro ezo anaghị akwado ohere nweta ume ọhụrụ.

Ngosipụta onyinye nzere ndị ahịa - a na-eji mgbe ngwa ahụ nwetara API. Ụdị ikike ikike a na-ejikarị emekọrịta ihe nkesa-na-sava nke ga-emerịrị na ndabere na-enweghị mmekọrịta onye ọrụ ozugbo. Ngosipụta nzere nke onye ahịa na-enye ohere ọrụ webụ (onye ahịa nzuzo) iji nzere nke ya kama ime ka onye ọrụ mara maka nyocha mgbe ị na-akpọ ọrụ webụ ọzọ. Maka nchekwa dị elu, ọ ga-ekwe omume maka ọrụ oku iji akwụkwọ (kama nzuzo nzuzo) dị ka nzere.

A kọwapụtara nkọwapụta OAuth2 na
Mgbasa ozi RF-6749
Mgbasa ozi RF-8252
Mgbasa ozi RF-6819

JWT token na uru ya

JWT (JSON Web Token) bụ ọkọlọtọ mepere emepe (https://tools.ietf.org/html/rfc7519) nke na-akọwa ụzọ kọmpat na nke nwere onwe ya iji nyefee ozi n'etiti ndị ọzọ dị ka ihe JSON.

Dịka ọkọlọtọ si dị, akara ahụ nwere akụkụ atọ na usoro ntọala-64, nke kewara site na ntụpọ. A na-akpọ akụkụ nke mbụ nkụnye eji isi mee, nke nwere ụdị akara na aha hash algọridim maka inweta mbinye aka dijitalụ. Akụkụ nke abụọ na-echekwa ozi bụ isi (onye ọrụ, njirimara, wdg). Akụkụ nke atọ bụ mbinye aka dijitalụ.

. .
Echekwala token na DB gị. N'ihi na akara ngosi ziri ezi dabara na paswọọdụ, ịchekwa akara ahụ dị ka ịchekwa paswọọdụ na ederede doro anya.
Nweta akara bụ ihe nrịbama na-enye onye nwe ya ohere ịnweta akụrụngwa sava echekwara. Ọ na-enwekarị obere ndụ ma nwee ike ibu ozi ndị ọzọ dị ka adreesị IP nke ndị otu na-arịọ token.

Weghachite akara ngosi bụ akara nke na-enye ndị ahịa ohere ịrịọ akara ohere ọhụrụ mgbe ndụ ha gwụchara. A na-enyekarị akara ngosi ndị a ogologo oge.

Isi uru nke iji na microservice architecture:

  • Ikike ịnweta ngwa na ọrụ dị iche iche site na nyocha otu oge.
  • Na enweghị ọtụtụ njirimara achọrọ na profaịlụ onye ọrụ, ọ ga-ekwe omume ịba ụba na data nke enwere ike ịgbakwunye na ụgwọ ọrụ, gụnyere akpaghị aka na na-efe efe.
  • Ọ dịghị mkpa ịchekwa ozi gbasara nnọkọ ndị na-arụ ọrụ; ngwa nkesa na-achọ naanị iji nyochaa mbinye aka.
  • Njikwa nnweta ọzọ na-agbanwe agbanwe site na njirimara ndị ọzọ na ibu ọrụ.
  • Iji akara mbinye aka maka nkụnye eji isi mee na ụgwọ ọrụ na-abawanye nchebe nke ngwọta n'ozuzu ya.

JWT token - mejupụtara

Nkụnye eji isi mee - site na ndabara, nkụnye eji isi mee nwere naanị ụdị token na algọridim eji ezoro ezo.

A na-echekwa ụdị akara ngosi ahụ na igodo "ụdị". A na-eleghara igodo 'ụdị' ahụ anya na JWT. Ọ bụrụ na igodo "ụdị" dị, uru ya ga-abụrịrị JWT iji gosi na ihe a bụ JSON Web Token.

Igodo nke abụọ "alg" na-akọwa algọridim eji ezoro ezo akara. Ekwesịrị ịtọ ya na HS256 na ndabara. Ederede nkụnye eji isi mee na base64.

{"alg": "HS256", "ụdị": "JWT"}
ugwo (ọdịnaya) - ugwo a na-akwụ ụgwọ na-echekwa ozi ọ bụla achọrọ ka enyocha ya. A na-ama mkpịsị ugodi ọ bụla dị n'ụgwọ ụgwọ dị ka "ịkwado". Dịka ọmụmaatụ, ịnwere ike itinye ngwa ahụ naanị site na ịkpọ oku (promo mechiri emechi). Mgbe anyị chọrọ ịkpọ mmadụ òkù ka ọ bịa, anyị na-ezigara ha akwụkwọ ozi. Ọ dị mkpa ịlele na adreesị ozi-e ahụ bụ nke onye na-anabata ọkpụkpọ òkù ahụ, yabụ anyị ga-etinye adreesị a na ụgwọ ọrụ, maka nke a anyị na-echekwa ya na igodo "email".

{"email":"[email protected]" }

Igodo dị n'ibu ụgwọ nwere ike ịbụ nke aka ike. Agbanyeghị, enwere ole na ole echekwabara:

  • iss (Onye na-enye ihe) - Na-achọpụta ngwa a na-esi na ya zipụ akara ngosi.
  • sub (Isiokwu) - na-akọwa isiokwu nke token.
  • aud (Ndị na-ege ntị) bụ ọtụtụ eriri nwere mmetụta ma ọ bụ URI bụ ndepụta nke ndị nnata nke akara ngosi a. Mgbe akụkụ nnata nwetara JWT na igodo enyere, ọ ga-enyocharịrị maka ọnụnọ nke onwe ya na ndị nnata - ma ọ bụghị na-eleghara akara ngosi ahụ anya.
  • exp (Oge Mmebi) - Na-egosi mgbe akara ahụ ga-agwụ. Ọkọlọtọ JWT chọrọ mmejuputa ya niile ka ọ jụ akara ngosi kubie ume. Igodo exp ga-abụrịrị stampụ oge na usoro unix.
  • nbf (Ọ bụghị Tupu) bụ oge n'ụdị unix na-ekpebi oge akara ngosi ga-adị irè.
  • iat (Enyere na) - igodo a na-anọchi anya oge enyere akara ma enwere ike iji ya chọpụta afọ JWT. Igodo iat ga-abụrịrị stampụ oge na usoro unix.
  • Jti (JWT ID) - eriri na-akọwa ihe nchọpụta pụrụ iche nke akara ngosi a, nke nwere mmetụta.

Ọ dị mkpa ịghọta na a naghị ebufe ụgwọ ọrụ n'ụdị ezoro ezo (ọ bụ ezie na enwere ike ịgbanye akara ma ọ ga-ekwe omume ịnyefe data ezoro ezo). Ya mere, ọ nweghị ike ịchekwa ozi nzuzo ọ bụla. Dị ka nkụnye eji isi mee, ụgwọ a na-akwụ bụ base64.
Ntinye aka - mgbe anyị nwere aha na ụgwọ ọrụ, anyị nwere ike gbakọọ mbinye aka.

A na-ewere nkụnye eji isi mee na ụgwọ akwụnye na base64 wee jikọta ya na ahịrị nke ntụpọ kewara. A na-etinye eriri a na igodo nzuzo na algọridim nzuzo nke akọwapụtara na nkụnye eji isi mee (igodo “alg”). Igodo nwere ike ịbụ eriri ọ bụla. A ga-ahọrọ eriri ogologo ogologo ka ọ ga-ewe ogologo oge iji bulie ya.

{"alg":"RSA1_5","ibu a na-akwụ":"A128CBC-HS256"}

Iwulite usoro ihe owuwu nke Keycloak Failover Cluster Architecture

Mgbe ị na-eji otu ụyọkọ maka ọrụ niile, enwere ọtụtụ ihe achọrọ maka ngwọta SSO. Mgbe ọnụ ọgụgụ nke oru ngo dị ntakịrị, ihe ndị a chọrọ adịghị ahụ anya maka ọrụ niile, Otú ọ dị, na-abawanye na ọnụ ọgụgụ nke ndị ọrụ na ntinye aka, ihe ndị chọrọ maka nnweta na arụmọrụ na-abawanye.

Ịbawanye ihe ize ndụ nke ọdịda nke otu SSO na-abawanye ihe ndị a chọrọ maka nhazi ihe ngwọta na ụzọ eji eme ihe maka redundancy nke components ma na-eduga na SLA siri ike. N'akụkụ a, ọtụtụ mgbe n'oge mmepe ma ọ bụ mmalite nke mmejuputa ihe ngwọta, ọrụ nwere akụrụngwa na-adịghị anabata nke ha. Ka mmepe na-aga n'ihu, a chọrọ ka ọ tọgbọrọ ohere maka mmepe na nhazi. Ụzọ kacha agbanwe agbanwe iji wuo ụyọkọ ọdịda bụ iji akpa virtualization ma ọ bụ usoro ngwakọ.

Iji rụọ ọrụ na ụdị ụyọkọ arụ ọrụ / arụ ọrụ na arụ ọrụ / na-agafe agafe, a chọrọ iji hụ na ndakọrịta data na nchekwa data mmekọrịta - a ga-emegharị ọnụ ọnụ nchekwa data abụọ n'otu oge n'etiti etiti data ekesara geo dị iche iche.

Ihe atụ kachasị mfe nke nrụnye na-anabataghị mmejọ.

SSO na microservice architecture. Anyị na-eji Keycloak. Akụkụ Nke 1

Kedu uru dị na iji otu ụyọkọ:

  • Nnukwu nnweta na arụmọrụ.
  • Nkwado maka ụdịdị arụ ọrụ: Ọ na-arụ ọrụ / na-arụ ọrụ, na-arụ ọrụ / na-agafe agafe.
  • Ikike nke n'ike n'ike - mgbe eji virtualization akpa.
  • Ohere nke njikwa na nlekota nke etiti.
  • Ụzọ ejikọtara ọnụ maka ịchọpụta / ịchọpụta / inye ndị ọrụ ikike n'ọrụ.
  • More transperent mmekọrịta n'etiti dị iche iche oru ngo na-enweghị onye ọrụ aka.
  • Ikike iji akara JWT mee ihe n'ọrụ dị iche iche.
  • Otu ebe ntụkwasị obi.
  • Mwepụta ngwa ngwa nke oru ngo site na iji microservices/container virtualization (enweghị mkpa ibuli na hazie ihe ndị ọzọ).
  • Ọ ga-ekwe omume ịzụta nkwado azụmahịa n'aka onye na-ere ahịa.

Ihe ị ga-achọ mgbe ị na-eme atụmatụ ụyọkọ

DBMS

Keycloak na-eji usoro njikwa nchekwa data na-echekwa: ala, ndị ahịa, ndị ọrụ, wdg.
A na-akwado ụdị DBMS dị iche iche: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak na-abịa na nchekwa data arụnyere n'ime ya. A na-atụ aro ka iji maka gburugburu anaghị ebu - dị ka gburugburu mmepe.

Iji rụọ ọrụ na ụdị ụyọkọ na-arụsi ọrụ ike / na-arụ ọrụ na nke na-arụ ọrụ / na-agafe agafe, achọrọ ngbanwe data n'ime nchekwa data mmekọrịta, na ọnụ ụyọkọ nchekwa data abụọ na-ejikọta ọnụ n'etiti etiti data.

Cache ekesara (Infinspan)

Ka ụyọkọ ahụ rụọ ọrụ nke ọma, mmekọrịta agbakwunyere nke ụdị cache ndị a na-eji JBoss Data Grid a chọrọ:

Oge nyocha - ejiri iji chekwaa data mgbe ị na-enyocha otu onye ọrụ. Arịrịọ sitere na cache a na-agụnye naanị ihe nchọgharị na ihe nkesa Keycloak, ọ bụghị ngwa.

A na-eji akara ngosi eme ihe maka ọnọdụ ndapụta ebe onye ọrụ kwesịrị ịkwado ihe omume n'agbanyeghị (site na email). Dịka ọmụmaatụ, n'oge okwuntughe chefuo, a na-eji cache actionTokens Infinispan iji dobe metadata gbasara akara ngosi emekọrịtara nke ejirila, yabụ enweghị ike iji ya ọzọ.

Caching na imebi data nke na-adịgide adịgide - nke a na-eji echekwa data na-adịgide adịgide iji zere ajụjụ ndị na-adịghị mkpa na nchekwa data. Mgbe ihe nkesa Keycloak ọ bụla na-emelite data ahụ, sava Keycloak ndị ọzọ na ebe data niile kwesịrị ịma gbasara ya.

Ọrụ - A na-eji naanị izipu ozi na-ezighi ezi n'etiti ọnụ ụyọkọ na ebe data.

Oge onye ọrụ - a na-eji echekwa data gbasara oge onye ọrụ nke dabara maka ogologo oge ihe nchọgharị onye ọrụ. Ebe nchekwa ahụ ga-edozi arịrịọ HTTP sitere na onye ọrụ njedebe na ngwa ahụ.

Nchedo ike ike - ejiri iji soro data gbasara nbanye dara ada.

Ndozi ibu

Ihe nkwụnye ibu bụ otu ebe ntinye na mkpuchi mkpuchi ma ọ ga-akwadorịrị oge nnyapade.

Sava ngwa

A na-eji ha chịkwaa mmekọrịta nke akụrụngwa n'etiti ibe ha ma nwee ike ịmegharị ya ma ọ bụ tinye ya site na iji ngwaọrụ akpaaka dị adị yana njiri ike nke akụrụngwa akpaaka akụrụngwa. Ihe ndapụta mbugharị kachasị na OpenShift, Kubernates, Rancher.

Nke a mechiri akụkụ nke mbụ - usoro iwu. N'usoro isiokwu na-esote, a ga-enyocha ihe atụ nke njikọta na ndị na-enye njirimara dị iche iche na ihe atụ nke ntọala.

isi: www.habr.com

Tinye a comment