SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

Fi kwalunkwe kumpanija kbira, u X5 Retail Group mhijiex eċċezzjoni, peress li tiżviluppa, in-numru ta 'proġetti li jeħtieġu l-awtorizzazzjoni tal-utent jiżdied. Maż-żmien, hija meħtieġa transizzjoni bla xkiel tal-utenti minn applikazzjoni għal oħra, u mbagħad ikun hemm bżonn li jintuża server wieħed Single-Sing-On (SSO). Imma xi ngħidu dwar meta fornituri tal-identità bħal AD jew oħrajn li m'għandhomx attributi addizzjonali diġà jintużaw f'diversi proġetti. Klassi ta 'sistemi msejħa "sensara ta' identifikazzjoni" se tiġi għas-salvataġġ. L-aktar funzjonali huma r-rappreżentanti tiegħu, bħal Keycloak, Gravitee Access management, eċċ Ħafna drabi, każijiet ta 'użu jistgħu jkunu differenti: interazzjoni tal-magni, parteċipazzjoni tal-utent, eċċ Is-soluzzjoni għandha tappoġġja funzjonalità flessibbli u skalabbli li tista' tgħaqqad ir-rekwiżiti kollha f'wieħed, u soluzzjonijiet bħal dawn il-kumpanija tagħna issa għandha sensar indikazzjoni - Keycloak.

SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

Keycloak huwa prodott miftuħ għall-kontroll tal-identità u l-aċċess miżmum minn RedHat. Hija l-bażi għall-prodotti tal-kumpanija li jużaw SSO - RH-SSO.

Kunċetti bażiċi

Qabel ma tibda tittratta soluzzjonijiet u approċċi, għandek tiddeċiedi f'termini u sekwenza ta 'proċessi:

SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

Identifikazzjoni hija proċedura għar-rikonoxximent ta’ suġġett bl-identifikatur tiegħu (fi kliem ieħor, din hija d-definizzjoni ta’ isem, login jew numru).

Awtentikazzjoni - din hija proċedura ta’ awtentikazzjoni (l-utent jiġi ċċekkjat b’password, l-ittra tiġi ċċekkjata b’firma elettronika, eċċ.)

Awtorizzazzjoni – qed tipprovdi aċċess għal riżorsa (pereżempju, email).

Identity Broker Keycloak

keycloak hija soluzzjoni ta' ġestjoni ta' identità u aċċess ta' sors miftuħ iddisinjata għall-użu f'sistemi ta' informazzjoni fejn jistgħu jintużaw mudelli ta' arkitettura ta' mikroservizzi.

Keycloak joffri karatteristiċi bħal Single Sign-On (SSO), Identity Brokered u Login Soċjali, Federazzjoni tal-Utenti, Klijent Adapters, Admin Console, u Account Management Console.

Funzjonalità bażika appoġġjata minn Keycloak:

  • Single-Sign On u Single-Sign Out għall-applikazzjonijiet tal-browser.
  • Appoġġ għal OpenID/OAuth 2.0/SAML.
  • Senserija tal-Identità - awtentikazzjoni bl-użu ta' fornituri esterni tal-identità OpenID Connect jew SAML.
  • Login Soċjali - Google, GitHub, Facebook, Twitter appoġġ għall-identifikazzjoni tal-utent.
  • Federazzjoni tal-Utenti – sinkronizzazzjoni tal-utenti minn servers LDAP u Active Directory u fornituri oħra tal-identità.
  • Kerberos bridge - bl-użu ta' server Kerberos għall-awtentikazzjoni awtomatika tal-utent.
  • Admin Console - għal ġestjoni unifikata ta 'settings u għażliet ta' soluzzjoni permezz tal-Web.
  • Account Management Console - għall-awtoġestjoni tal-profil tal-utent.
  • Personalizzazzjoni tas-soluzzjoni bbażata fuq l-identità korporattiva tal-kumpanija.
  • Awtentikazzjoni 2FA - appoġġ TOTP/HOTP bl-użu ta 'Google Authenticator jew FreeOTP.
  • Login Flows - l-awtoreġistrazzjoni tal-utent, l-irkupru u l-issettjar tal-password, u oħrajn huma possibbli.
  • Ġestjoni tas-Sessjoni - L-amministraturi jistgħu jimmaniġġjaw is-sessjonijiet tal-utenti minn punt wieħed.
  • Token Mappers - jorbtu attributi tal-utent, rwoli u attributi oħra meħtieġa għat-tokens.
  • Ġestjoni flessibbli tal-politika permezz tal-isfera, l-applikazzjoni u l-utenti.
  • Appoġġ CORS - L-adapters tal-klijenti għandhom appoġġ CORS inkorporat.
  • Interfaces tal-Fornitur tas-Servizzi (SPI) - numru kbir ta 'SPIs li jippermettulek tikkonfigura diversi aspetti tas-server: flussi ta' awtentikazzjoni, fornituri tal-identità, mapping tal-protokoll u ħafna aktar.
  • Klijenti adapters għal applikazzjonijiet JavaScript, WildFly, JBoss EAP, Fjus, Tomcat, Jetty, Spring.
  • Appoġġ għall-ħidma ma 'diversi applikazzjonijiet li jappoġġjaw il-librerija OpenID Connect Relying Party jew SAML 2.0 Service Provider Library.
  • Espandibbli bl-użu ta 'plugins.

Għal proċessi CI / CD, kif ukoll awtomazzjoni ta 'proċessi ta' ġestjoni f'Keycloak, tista 'tintuża l-API REST / JAVA API. Id-dokumentazzjoni hija disponibbli elettronikament:

SERĦAN 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

Fornituri tal-Identità tal-Intrapriża (Fil-post)

Kapaċità li jawtentikaw l-utenti permezz tas-servizzi tal-Federazzjoni tal-Utenti.

SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

Awtentikazzjoni pass-through tista 'tintuża wkoll - jekk l-utenti huma awtentikati fuq stazzjonijiet tax-xogħol b'Kerberos (LDAP jew AD), allura jistgħu jiġu awtentikati awtomatikament ma' Keycloak mingħajr ma jkollhom għalfejn jerġgħu jipprovdu l-isem tal-utent u l-password tagħhom.

Għall-awtentikazzjoni u aktar awtorizzazzjoni tal-utenti, huwa possibbli li jintuża DBMS relazzjonali, li huwa l-aktar applikabbli għall-ambjenti tal-iżvilupp, peress li ma jinvolvix settings u integrazzjonijiet twal fl-istadji bikrija tal-proġetti. B'mod awtomatiku, Keycloak juża DBMS integrat biex jaħżen is-settings u d-dejta tal-utent.

Il-lista ta 'DBMSs appoġġjati hija estensiva u tinkludi: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle u oħrajn. L-aktar ittestjati bħalissa huma Oracle 12C Release1 RAC u Galera 3.12 cluster għal MariaDB 10.1.19.

Fornituri tal-identità - login soċjali

Huwa possibbli li tuża login minn netwerks soċjali. Biex tattiva l-abbiltà li tawtentika l-utenti, uża l-console tal-amministrazzjoni Keycloack. Bidliet fil-kodiċi tal-applikazzjoni mhumiex meħtieġa u din il-funzjonalità hija disponibbli barra mill-kaxxa u tista 'tiġi attivata fi kwalunkwe stadju tal-proġett.

SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

Huwa possibbli li tuża l-fornituri ta' l-Identità OpenID/SAML għall-awtentikazzjoni ta' l-utent.

Xenarji ta' awtorizzazzjoni tipiċi bl-użu ta' OAuth2 f'Keycloak

Fluss tal-Kodiċi ta' Awtorizzazzjoni - użat ma' applikazzjonijiet min-naħa tas-server. Wieħed mill-aktar tipi komuni ta 'permess ta' awtorizzazzjoni għaliex huwa adattat tajjeb għal applikazzjonijiet ta 'server fejn il-kodiċi tas-sors tal-applikazzjoni u d-dejta tal-klijent mhumiex disponibbli għal barranin. Il-proċess f'dan il-każ huwa bbażat fuq direzzjoni mill-ġdid. L-applikazzjoni trid tkun kapaċi tinteraġixxi ma 'utent aġent (utent-aġent), bħal web browser - biex tirċievi kodiċijiet ta' awtorizzazzjoni API ridirezzjonati permezz tal-utent aġent.

fluss impliċitu - użat minn applikazzjonijiet mobbli jew tal-web (applikazzjonijiet li jaħdmu fuq it-tagħmir tal-utent).

It-tip ta' permess ta' awtorizzazzjoni impliċita jintuża minn applikazzjonijiet mobbli u tal-web fejn il-privatezza tal-klijent ma tistax tiġi ggarantita. It-tip ta' permess impliċitu juża wkoll direzzjoni mill-ġdid tal-aġent tal-utent, fejn it-token tal-aċċess jiġi mgħoddi lill-aġent tal-utent għal użu aktar tard fl-applikazzjoni. Dan jagħmel it-token disponibbli għall-utent u applikazzjonijiet oħra fuq it-tagħmir tal-utent. Dan it-tip ta 'permess ta' awtorizzazzjoni ma jawtentikax l-identità tal-applikazzjoni, u l-proċess innifsu jiddependi fuq il-URL ta 'direzzjoni mill-ġdid (reġistrat qabel mas-servizz).

Il-Fluss Impliċitu ma jappoġġjax it-tokens tal-aġġornament tat-token tal-aċċess.

Fluss ta' Għotja tal-Kredenzjali tal-Klijent — jintużaw meta l-applikazzjoni taċċessa l-API. Dan it-tip ta' permess ta' awtorizzazzjoni huwa tipikament użat għal interazzjonijiet minn server għal server li jridu jseħħu fl-isfond mingħajr interazzjoni immedjata tal-utent. Il-fluss tal-għotja tal-kredenzjali tal-klijent jippermetti li servizz tal-web (klijent kunfidenzjali) juża l-kredenzjali tiegħu stess minflok jippersona lill-utent għall-awtentikazzjoni meta jsejjaħ servizz tal-web ieħor. Għal livell ogħla ta' sigurtà, huwa possibbli li s-servizz tas-sejħa juża ċertifikat (minflok sigriet kondiviż) bħala kredenzjali.

L-ispeċifikazzjoni OAuth2 hija deskritta fi
RFC-6749
RFC-8252
RFC-6819

JWT token u l-vantaġġi tiegħu

JWT (JSON Web Token) huwa standard miftuħ (https://tools.ietf.org/html/rfc7519), li jiddefinixxi mod kompatt u awtonomu biex tittrasferixxi informazzjoni b'mod sigur bejn il-partijiet fil-forma ta 'oġġett JSON.

Skont l-istandard, token jikkonsisti fi tliet partijiet f'format bażi-64, separati minn tikek. L-ewwel parti tissejjaħ header, li fiha t-tip ta 'token u l-isem tal-algoritmu tal-hash għall-kisba tal-firma diġitali. It-tieni parti taħżen l-informazzjoni bażika (utent, attributi, eċċ.). It-tielet parti hija l-firma diġitali.

. .
Qatt taħżen token fid-DB tiegħek. Minħabba li token validu huwa ekwivalenti għal password, il-ħażna tat-token hija bħall-ħażna tal-password f'test ċar.
Token ta' aċċess huwa token li jipprovdi lis-sid tiegħu b'aċċess għar-riżorsi protetti tas-server. Normalment ikollu ħajja qasira u jista 'jġorr informazzjoni addizzjonali, bħall-indirizz IP tal-parti li titlob it-token.

Aġġorna token huwa token li jippermetti lill-klijenti jitolbu tokens ta' aċċess ġodda wara li jiskadi ħajjithom. Dawn it-tokens normalment jinħarġu għal perjodu twil.

Il-vantaġġi ewlenin tal-użu ta 'arkitettura ta' mikroservizz:

  • Kapaċità li taċċessa diversi applikazzjonijiet u servizzi permezz ta 'awtentikazzjoni ta' darba.
  • Fin-nuqqas ta 'numru ta' attributi meħtieġa fil-profil tal-utent, huwa possibbli li tarrikkixxi b'dejta li tista 'tiġi miżjuda mat-tagħbija, inkluż awtomatizzata u fuq il-fly.
  • M'hemmx għalfejn tinħażen informazzjoni dwar sessjonijiet attivi, l-applikazzjoni tas-server teħtieġ biss tivverifika l-firma.
  • Kontroll ta 'aċċess aktar flessibbli permezz ta' attributi addizzjonali fit-tagħbija.
  • L-użu ta 'firma token għall-header u payload iżid is-sigurtà tas-soluzzjoni kollha kemm hi.

JWT token - kompożizzjoni

Titolu — b'mod awtomatiku, l-header fih biss it-tip ta' token u l-algoritmu użat għall-encryption.

It-tip tat-token huwa maħżun fiċ-ċavetta "typ". Iċ-ċavetta 'tip' hija injorata fil-JWT. Jekk iċ-ċavetta "typ" hija preżenti, il-valur tagħha għandu jkun JWT biex jindika li dan l-oġġett huwa JSON Web Token.

It-tieni ċavetta "alg" tiddefinixxi l-algoritmu użat biex jikkripta t-token. Għandu jkun issettjat għal HS256 awtomatikament. L-intestatura hija kodifikata f'base64.

{ "alg": "HS256", "typ": "JWT"}
Tagħbija (kontenut) - il-payload jaħżen kwalunkwe informazzjoni li trid tiġi ċċekkjata. Kull ċavetta fit-tagħbija hija magħrufa bħala "talba". Per eżempju, tista 'tidħol fl-applikazzjoni biss permezz ta' stedina (promo magħluqa). Meta rridu nistiednu lil xi ħadd biex jipparteċipa, nibagħtulu ittra ta’ stedina. Huwa importanti li niċċekkjaw li l-indirizz tal-email jappartjeni lill-persuna li taċċetta l-istedina, għalhekk aħna se ninkludu dan l-indirizz fil-payload, għal dan naħżnuh fiċ-ċavetta "email"

{ "email": "[protett bl-email]"}

Ċwievet fit-tagħbija jistgħu jkunu arbitrarji. Madankollu, hemm ftit riżervati:

  • iss (Emittent) - Jidentifika l-applikazzjoni li minnha qed jintbagħat it-token.
  • sub (Suġġett) - jiddefinixxi s-suġġett tat-token.
  • aud (Udjenza) – firxa ta’ strings jew URIs sensittivi għall-każi li hija lista ta’ riċevituri ta’ dan it-token. Meta l-parti li tirċievi tirċievi JWT b'ċavetta partikolari, għandha tiċċekkja għaliha nnifisha fir-riċevituri - inkella tinjora t-token.
  • exp (Ħin ta' Skadenza) - Jindika meta jiskadi t-token. L-istandard JWT jeħtieġ li l-implimentazzjonijiet kollha jirrifjutaw tokens skaduti. Iċ-ċavetta exp trid tkun timestamp f'format unix.
  • nbf (Mhux Qabel) huwa żmien f'format unix li jiddetermina l-mument meta t-token isir validu.
  • iat (Maħruġ Fi) - Din iċ-ċavetta tirrappreżenta l-ħin li t-token inħareġ u tista 'tintuża biex tiddetermina l-età tal-JWT. Iċ-ċavetta iat għandha tkun timestamp f'format unix.
  • Jti (JWT ID) — string li tiddefinixxi l-identifikatur uniku ta’ dan it-token, sensittiv għall-każ.

Huwa importanti li wieħed jifhem li l-payload ma tiġix trażmessa kodifikata (għalkemm it-tokens jistgħu jiġu nested u allura huwa possibbli li tittrasmetti dejta kodifikata). Għalhekk, ma tistax taħżen xi informazzjoni sigrieta fiha. Bħall-header, it-tagħbija hija kodifikata base64.
Firma - meta jkollna titolu u payload, nistgħu nikkalkulaw il-firma.

L-header u t-tagħbija ikkodifikata f'base64 jittieħdu u jingħaqdu f'linja separata b'tikka. Din is-sekwenza u ċ-ċavetta sigrieta mbagħad jiddaħħlu fl-algoritmu tal-kriptaġġ speċifikat fl-intestatura (ċavetta “alg”). Iċ-ċavetta tista 'tkun kwalunkwe string. Kordi itwal se jkunu l-aktar preferibbli peress li jkunu jeħtieġu aktar ħin biex jintgħażlu.

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

Bini ta 'Arkitettura ta' Cluster ta' Failover Keycloak

Meta tuża cluster wieħed għall-proġetti kollha, hemm rekwiżiti akbar għal soluzzjoni SSO. Meta n-numru ta 'proġetti huwa żgħir, dawn ir-rekwiżiti mhumiex daqshekk notevoli għall-proġetti kollha, madankollu, b'żieda fin-numru ta' utenti u integrazzjonijiet, ir-rekwiżiti għad-disponibbiltà u l-prestazzjoni jiżdiedu.

Iż-żieda fir-riskji ta' falliment ta' SSO wieħed iżid ir-rekwiżiti għall-arkitettura tas-soluzzjoni u l-metodi użati għar-redundancy tal-komponenti u twassal għal SLA strett ħafna. F'dan ir-rigward, aktar spiss matul l-iżvilupp jew l-istadji bikrija ta' implimentazzjoni ta' soluzzjonijiet, il-proġetti għandhom l-infrastruttura tagħhom stess li ma tollerax ħsarat. Hekk kif l-iżvilupp jimxi 'l quddiem, huwa meħtieġ li jiġu stabbiliti opportunitajiet għall-iżvilupp u l-iskala. L-aktar mod flessibbli biex jinbena cluster ta' failover huwa l-użu tal-virtwalizzazzjoni tal-kontejners jew approċċ ibridu.

Biex taħdem fil-modi ta 'cluster Attiva/Attiva u Attiva/Passiva, huwa meħtieġ li tiġi żgurata l-konsistenza tad-data fid-database relazzjonali - iż-żewġ nodi tad-database għandhom jiġu replikati b'mod sinkroniku bejn ċentri tad-data differenti ġeo distribwiti.

L-aktar eżempju sempliċi ta 'installazzjoni li tollera l-ħsarat.

SSO fuq l-arkitettura tal-mikroservizz. Aħna nużaw Keycloak. Parti Nru 1

X'inhuma l-vantaġġi li tuża cluster wieħed:

  • Disponibbiltà u prestazzjoni għolja.
  • Appoġġ modi operattivi: Attiv / Attiv, Attiv / Passiv.
  • Possibbiltà ta 'skalar dinamiku - meta tuża l-virtwalizzazzjoni tal-kontenitur.
  • Possibbiltà ta 'ġestjoni u monitoraġġ ċentralizzati.
  • Approċċ unifikat għall-identifikazzjoni/l-awtentikazzjoni/l-awtorizzazzjoni ta' utenti fi proġetti.
  • Interazzjoni aktar trasparenti bejn proġetti differenti mingħajr interazzjoni tal-utent.
  • Possibbiltà li jerġa 'jintuża t-token JWT f'diversi proġetti.
  • Punt uniku ta' fiduċja.
  • Tnedija aktar mgħaġġla ta 'proġetti bl-użu ta' mikroservizzi/virtwalizzazzjoni tal-kontenituri (l-ebda ħtieġa li jiġu installati u kkonfigurati komponenti addizzjonali).
  • Huwa possibbli li tixtri appoġġ kummerċjali mill-bejjiegħ.

X'għandek tikkunsidra meta tippjana cluster

DBMS

Keycloak juża sistema ta’ ġestjoni tad-database biex jaħżen: oqsma, klijenti, utenti, eċċ.
Firxa wiesgħa ta 'DBMS hija appoġġjata: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak jiġi bid-database relazzjonali integrata tagħha stess. Huwa rakkomandat li tuża għal ambjenti mhux mgħobbija - bħal ambjenti ta 'żvilupp.

Biex taħdem fil-modi ta' cluster Attiv/Attiv u Attiv/Passiv, hija meħtieġa konsistenza tad-dejta f'database relazzjonali, u ż-żewġ nodi tal-cluster tad-database huma replikati b'mod sinkroniku bejn iċ-ċentri tad-dejta.

Cache distribwit (Infinspan)

Biex il-cluster jaħdem b'mod korrett, hija meħtieġa sinkronizzazzjoni addizzjonali tat-tipi ta' caches li ġejjin bl-użu tal-JBoss Data Grid:

Sessjonijiet ta' awtentikazzjoni - użati biex tissejvja d-dejta meta tawtentika utent speċifiku. It-talbiet minn din il-cache tipikament jinvolvu biss il-browser u s-server Keycloak, mhux l-applikazzjoni.

Tokens ta' azzjoni - użati għal xenarji fejn l-utent jeħtieġ li jikkonferma azzjoni b'mod mhux sinkroniku (permezz ta' email). Pereżempju, waqt fluss tinsa l-password, il-cache ta’ actionTokens ta’ Infinispan tintuża biex iżżomm kont tal-metadejta dwar tokens ta’ azzjoni assoċjati li diġà ntużaw, u għalhekk ma tistax terġa’ tintuża.

Caching u invalidazzjoni ta 'data persistenti - użati biex cache data persistenti biex jiġu evitati mistoqsijiet bla bżonn għad-database. Meta xi server Keycloak jaġġorna d-dejta, is-servers Keycloak l-oħra kollha fiċ-ċentri tad-dejta kollha jeħtieġ li jkunu jafu biha.

Xogħol - Użat biss biex jintbagħtu messaġġi ta 'invalidazzjoni bejn nodi ta' cluster u ċentri tad-dejta.

Sessjonijiet tal-utent - użati biex jaħżnu dejta tas-sessjoni tal-utent li hija valida għat-tul tas-sessjoni tal-browser tal-utent. Il-cache trid tieħu ħsieb it-talbiet HTTP mill-utent aħħari u l-applikazzjoni.

Protezzjoni tal-forza bruta - użata biex issegwi d-dejta dwar il-logins falluti.

Ibbilanċjar tat-tagħbija

Il-load balancer huwa l-punt tad-dħul uniku għal keycloak u għandu jappoġġja sessjonijiet li jwaħħlu.

Servers tal-Applikazzjoni

Jintużaw biex jikkontrollaw l-interazzjoni tal-komponenti ma 'xulxin u jistgħu jiġu virtwalizzati jew f'kontejners bl-użu ta' għodod ta 'awtomazzjoni eżistenti u skalar dinamiku ta' għodod ta 'awtomazzjoni tal-infrastruttura. L-aktar xenarji ta' skjerament komuni f'OpenShift, Kubernates, Rancher.

Dan jikkonkludi l-ewwel parti - dik teoretika. Fis-serje ta' artikoli li ġejjin, se jiġu diskussi eżempji ta' integrazzjoni ma' diversi fornituri ta' identifikazzjoni u eżempji ta' settings.

Sors: www.habr.com

Żid kumment