SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Nan nenpòt ki gwo konpayi, ak X5 Yo Vann an Detay Group pa gen okenn eksepsyon, kòm li devlope, kantite pwojè ki mande pou itilizatè otorizasyon ogmante. Apre yon tan, tranzisyon itilizatè san pwoblèm soti nan yon aplikasyon nan yon lòt obligatwa, ak Lè sa a, gen yon bezwen sèvi ak yon sèl sèvè Single-Sing-On (SSO). Men, e lè founisè idantite tankou AD oswa lòt moun ki pa gen atribi adisyonèl yo deja itilize nan plizyè pwojè. Yon klas nan sistèm yo rele "koutye idantifikasyon" ap vin sekou. Ki pi fonksyonèl yo se reprezantan li yo, tankou Keycloak, jesyon Aksè Gravitee, elatriye Pi souvan, ka itilize yo ka diferan: entèraksyon machin, patisipasyon itilizatè, elatriye solisyon an dwe sipòte fonksyonalite fleksib ak évolutive ki ka konbine tout kondisyon nan yon sèl, ak solisyon sa yo konpayi nou an kounye a gen yon koutye endikasyon - Keycloak.

SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Keycloak se yon sous louvri idantite ak kontwòl aksè pwodwi kenbe pa RedHat. Li se baz pou pwodwi konpayi an lè l sèvi avèk SSO - RH-SSO.

Konsèp debaz

Anvan ou kòmanse fè fas ak solisyon ak apwòch, ou ta dwe deside an tèm ak sekans nan pwosesis:

SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Idantifikasyon se yon pwosedi pou rekonèt yon sijè pa idantifyan li (nan lòt mo, sa a se definisyon an nan yon non, login oswa nimewo).

Otantifikasyon - sa a se yon pwosedi otantifikasyon (itilizatè a tcheke avèk yon modpas, lèt la tcheke avèk yon siyati elektwonik, elatriye)

Otorizasyon - sa a se pwovizyon aksè a yon resous (pa egzanp, nan imèl).

Keycloak koutye idantite

keycloak se yon solisyon idantite ouvè ak jesyon aksè ki fèt pou itilize nan IS kote modèl achitekti mikwosèvis yo ka itilize.

Keycloak ofri karakteristik tankou enskripsyon sèl (SSO), idantite koutye ak koneksyon sosyal, federasyon itilizatè, adaptè kliyan, konsole admin ak konsole jesyon kont.

Fonksyonalite debaz ki sipòte pa Keycloak:

  • Single-Sign On ak Single-Sign Out pou aplikasyon navigatè.
  • Sipò pou OpenID/OAuth 2.0/SAML.
  • Koutye idantite - otantifikasyon lè l sèvi avèk ekstèn OpenID Connect oswa founisè idantite SAML.
  • Sosyal Login - Google, GitHub, Facebook, Twitter sipò pou idantifikasyon itilizatè.
  • Federasyon Itilizatè - senkronizasyon itilizatè ki soti nan LDAP ak sèvè Active Directory ak lòt founisè idantite.
  • Kerberos pon - lè l sèvi avèk yon sèvè Kerberos pou otantifikasyon itilizatè otomatik.
  • Admin Console - pou jesyon inifye nan anviwònman ak opsyon solisyon atravè entènèt la.
  • Kont Jesyon Konsole - pou jesyon pwofil itilizatè endepandan.
  • Pèrsonalizasyon nan solisyon an ki baze sou idantite antrepriz nan konpayi an.
  • 2FA Otantifikasyon - TOTP/HOTP sipò lè l sèvi avèk Google Authenticator oswa FreeOTP.
  • Login Flows - itilizatè pwòp tèt ou-enskripsyon, rekiperasyon modpas ak reset, ak lòt moun posib.
  • Jesyon Sesyon - administratè yo ka jere sesyon itilizatè yo nan yon sèl pwen.
  • Token Mappers - obligatwa itilizatè atribi, wòl ak lòt atribi obligatwa nan marqueur.
  • Jesyon politik fleksib atravè domèn, aplikasyon ak itilizatè yo.
  • Sipò CORS - Adaptè kliyan yo gen sipò CORS entegre.
  • Entèfas founisè sèvis (SPI) - Yon gwo kantite SPI ki pèmèt ou personnaliser divès aspè nan sèvè a: koule otantifikasyon, founisè idantite, kat pwotokòl, ak plis ankò.
  • Adaptè kliyan pou aplikasyon JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Sipò pou travay ak divès aplikasyon ki sipòte bibliyotèk OpenID Connect Relying Party oswa bibliyotèk founisè sèvis SAML 2.0.
  • Dilatabl lè l sèvi avèk grefon.

Pou pwosesis CI / CD, osi byen ke automatisation nan pwosesis jesyon nan Keycloak, REST API / JAVA API ka itilize. Dokimantasyon disponib elektwonikman:

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

Founisè idantite antrepriz (nan lokal)

Kapasite pou otantifye itilizatè yo atravè sèvis Federasyon Itilizatè yo.

SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Otantifikasyon pasaj ka itilize tou - si itilizatè yo otantifye kont estasyon travay ak Kerberos (LDAP oswa AD), Lè sa a, yo ka otomatikman otantifye nan Keycloak san yo pa bezwen antre non itilizatè yo ak modpas yo ankò.

Pou otantifikasyon ak plis otorizasyon itilizatè yo, li posib pou itilize yon DBMS relasyon, ki pi aplikab pou anviwònman devlopman, paske li pa enplike anviwònman long ak entegrasyon nan premye etap yo nan pwojè yo. Pa default, Keycloak itilize yon DBMS entegre pou estoke paramèt ak done itilizatè yo.

Lis DBMS sipòte yo vaste e li gen ladann: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ak lòt moun. Ki pi teste jiskaprezan se Oracle 12C Release1 RAC ak Galera 3.12 cluster pou MariaDB 10.1.19.

Founisè idantite - koneksyon sosyal

Li posib pou itilize yon login nan rezo sosyal yo. Pou aktive kapasite pou otantifye itilizatè yo, sèvi ak konsole admin Keycloack la. Chanjman nan kòd aplikasyon an pa obligatwa epi fonksyonalite sa a disponib nan bwat la epi yo ka aktive nan nenpòt etap nan pwojè a.

SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Li posib pou itilize founisè idantite OpenID/SAML pou otantifikasyon itilizatè.

Senaryo otorizasyon tipik lè l sèvi avèk OAuth2 nan Keycloak

Koule Kòd Otorizasyon - itilize ak aplikasyon pou bò sèvè. Youn nan kalite otorizasyon ki pi komen paske li byen adapte pou aplikasyon sèvè kote kòd sous aplikasyon an ak done kliyan yo pa disponib pou moun ki andeyò. Pwosesis la nan ka sa a baze sou redireksyon. Aplikasyon an dwe kapab kominike ak yon ajan itilizatè (ajan itilizatè), tankou yon navigatè entènèt - pou resevwa kòd otorizasyon API redireksyon atravè ajan itilizatè a.

Koule Enplis - itilize pa aplikasyon mobil oswa entènèt (aplikasyon ki kouri sou aparèy itilizatè a).

Kalite pèmisyon otorizasyon implicite yo itilize pa aplikasyon mobil ak entènèt kote konfidansyalite kliyan pa ka garanti. Kalite pèmisyon implicite itilize tou redireksyon ajan itilizatè, kidonk siy aksè a pase bay ajan itilizatè a pou plis itilize nan aplikasyon an. Sa fè siy la disponib pou itilizatè a ak lòt aplikasyon sou aparèy itilizatè a. Kalite pèmisyon otorizasyon sa a pa otantifye idantite aplikasyon an, epi pwosesis la li menm depann sou yon URL redireksyon (ki te deja anrejistre ak sèvis la).

Implicit Flow pa sipòte siy rafrechisman jeton aksè.

Kliyan kalifikasyon Grant Flow — yo itilize lè aplikasyon an jwenn aksè nan API a. Sa a se kalite otorizasyon pèmisyon tipikman itilize pou entèraksyon sèvè-a-sèvè ki dwe fèt nan background nan san entèraksyon itilizatè imedya. Flux sibvansyon kalifikasyon kliyan an pèmèt yon sèvis entènèt (kliyan konfidansyèl) sèvi ak pwòp kalifikasyon li olye pou yo imite yon itilizatè pou otantifye lè w ap rele yon lòt sèvis entènèt. Pou yon pi wo nivo sekirite, li posib pou sèvis apèl la sèvi ak yon sètifika (olye de yon sekrè pataje) kòm yon kalifikasyon.

Se spesifikasyon OAuth2 ki dekri nan
RFC-6749
RFC-8252
RFC-6819

JWT token ak benefis li yo

JWT (JSON Web Token) se yon estanda ouvè (https://tools.ietf.org/html/rfc7519) ki defini yon fason kontra ak endepandan pou transfere enfòmasyon an sekirite ant pati yo kòm yon objè JSON.

Dapre estanda a, siy la konsiste de twa pati nan fòma baz-64, separe pa pwen. Premye pati a rele header a, ki gen kalite siy ak non algorithm hash la pou jwenn yon siyati dijital. Dezyèm pati a estoke enfòmasyon debaz yo (itilizatè, atribi, elatriye). Twazyèm pati a se siyati dijital la.

. .
Pa janm sere yon siy nan DB ou a. Paske yon siy valab ekivalan a yon modpas, estoke siy la se tankou estoke modpas la nan tèks klè.
Aksè jeton se yon siy ki bay mèt li aksè a resous sèvè an sekirite. Li anjeneral gen yon lavi kout epi li ka pote enfòmasyon adisyonèl tankou adrès IP pati ki mande siy la.

Rafrechi siy se yon siy ki pèmèt kliyan yo mande nouvo siy aksè apre lavi yo fin ekspire. Siy sa yo anjeneral bay pou yon peryòd tan ki long.

Avantaj prensipal yo nan itilize nan achitekti mikwosèvis:

  • Kapasite pou jwenn aksè nan divès aplikasyon ak sèvis atravè otantifikasyon yon sèl fwa.
  • Nan absans yon kantite atribi obligatwa nan pwofil itilizatè a, li posib pou anrichi ak done ki ka ajoute nan chaj la, ki gen ladan otomatik ak sou vole.
  • Pa gen okenn nesesite pou estoke enfòmasyon sou sesyon aktif yo, aplikasyon sèvè a sèlman bezwen verifye siyati a.
  • Kontwòl aksè pi fleksib atravè atribi adisyonèl nan chaj la.
  • Itilizasyon yon siyati siy pou header ak payload ogmante sekirite solisyon an kòm yon antye.

JWT token - konpozisyon

Tit - pa default, header la gen sèlman kalite siy ak algorithm yo itilize pou chifreman.

Kalite siy la estoke nan kle "typ". Kle 'kalite' a inyore nan JWT la. Si kle "typ" la prezan, valè li dwe JWT pou endike objè sa a se yon JSON Web Token.

Dezyèm kle "alg" defini algorithm yo itilize pou ankripte siy la. Li ta dwe mete nan HS256 pa default. Se header la kode nan base64.

{ "alg": "HS256", "type": "JWT"}
chaj (kontni) - chaj la estoke nenpòt enfòmasyon ki bezwen tcheke. Chak kle nan chaj la ke yo rekonèt kòm yon "reklamasyon". Pou egzanp, ou ka antre nan aplikasyon an sèlman sou envitasyon (fèmen promo). Lè nou vle envite yon moun patisipe, nou voye yon lèt envitasyon pou li. Li enpòtan pou tcheke adrès imel la fè pati moun ki aksepte envitasyon an, kidonk nou pral mete adrès sa a nan chaj la, pou sa nou sere li nan kle "imel" la.

{ "imel": "[imèl pwoteje]"}

Kle nan chaj ka abitrè. Sepandan, gen kèk rezève:

  • iss (Emeteur) - Idantifye aplikasyon an ki soti nan ki siy la yo te voye.
  • sub (Subject) - defini sijè a nan siy la.
  • aud (Odyans) se yon etalaj de kòd ka-sansib oswa URI ki se yon lis moun k ap resevwa siy sa a. Lè bò k ap resevwa a resevwa yon JWT ak kle a bay, li dwe tcheke pou prezans nan tèt li nan moun k ap resevwa yo - otreman inyore siy la.
  • exp (Tan ekspirasyon) - Endike lè siy la ekspire. Estanda JWT mande pou tout aplikasyon li yo rejte siy ekspire yo. Kle exp a dwe yon timestamp nan fòma UNIX.
  • nbf (Pa Anvan) se yon tan nan fòma Unix ki detèmine moman sa a lè siy la vin valab.
  • iat (Emisyone nan) - Kle sa a reprezante tan yo te bay siy la epi yo ka itilize pou detèmine laj JWT la. Kle iat la dwe yon timestamp nan fòma UNIX.
  • Jti (JWT ID) — yon kòd ki defini idantifyan inik siy sa a, ki sansib pou ka.

Li enpòtan pou w konprann ke chaj la pa transmèt nan fòm chiffres (byenke siy yo ka enbrike epi li se posib yo transmèt done chiffres). Se poutèt sa, li pa ka estoke okenn enfòmasyon sekrè. Tankou header la, chaj la se base64 kode.
Siyati - lè nou gen yon tit ak chaj, nou ka kalkile siyati a.

Base64-kode: header ak payload yo pran, yo konbine nan yon fisèl atravè yon pwen. Lè sa a, fisèl sa a ak kle sekrè a se antre nan algorithm chifreman ki espesifye nan header la ("alg" kle). Kle a ka nenpòt fisèl. Fil pi long yo pral pi pito paske li pral pran plis tan pou ranmase.

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

Bati yon Achitekti Cluster Failoak Keycloak

Lè w ap itilize yon sèl gwoup pou tout pwojè, gen plis kondisyon pou yon solisyon SSO. Lè kantite pwojè yo piti, kondisyon sa yo pa tèlman aparan pou tout pwojè yo, sepandan, ak yon ogmantasyon nan kantite itilizatè yo ak entegrasyon, kondisyon pou disponiblite ak pèfòmans ogmante.

Ogmante risk pou yon sèl echèk SSO ogmante kondisyon yo pou achitekti solisyon an ak metòd yo itilize pou eleman redondants ak mennen nan yon SLA trè sere. Nan sans sa a, pi souvan pandan devlopman oswa premye etap aplikasyon solisyon yo, pwojè yo gen pwòp enfrastrikti ki pa toleran fòt yo. Pandan devlopman ap pwogrese, li oblije bay opòtinite pou devlopman ak escalade. Li pi fleksib pou konstwi yon gwoup failover lè l sèvi avèk Virtualization veso oswa yon apwòch ibrid.

Pou travay nan mòd gwoup Aktif/Aktif ak Aktif/Pasif, li oblije asire konsistans done nan yon baz done relasyon - tou de nœuds baz done yo dwe repwodui senkronik ant diferan sant done jeo distribye.

Egzanp ki pi senp nan yon enstalasyon toleran fay.

SSO sou achitekti mikwosèvis. Nou itilize Keycloak. Pati #1

Ki avantaj ki genyen lè w sèvi ak yon sèl gwoup:

  • Segondè disponiblite ak pèfòmans.
  • Sipò pou mòd opere: aktif / aktif, aktif / pasif.
  • Posiblite pou dekale dinamik - lè w ap itilize Virtualization veso.
  • Posibilite pou jesyon santralize ak siveyans.
  • Apwòch inifye pou idantifikasyon/otantifikasyon/otorizasyon itilizatè yo nan pwojè yo.
  • Plis transparan entèraksyon ant diferan pwojè san patisipasyon itilizatè.
  • Kapasite pou reitilize siy JWT la nan plizyè pwojè.
  • Single pwen nan konfyans.
  • Pi vit lansman pwojè lè l sèvi avèk mikwosèvis/virtualizasyon veso (pa bezwen enstale ak konfigirasyon eleman adisyonèl).
  • Li posib pou achte sipò komèsyal nan men vandè a.

Kisa pou w chèche lè w ap planifye yon gwoup

DBMS

Keycloak sèvi ak yon sistèm jesyon baz done pou estoke: domèn, kliyan, itilizatè, elatriye.
Yon pakèt DBMS sipòte: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak vini ak pwòp baz done relasyon entegre li yo. Rekòmande pou itilize nan anviwònman limyè-devwa, tankou anviwònman devlopman.

Pou travay nan mòd gwoup Aktif/Aktif ak Aktif/Pasif, li nesesè pou asire konsistans done nan baz done relasyon an epi tou de nœuds gwoup baz done yo repwodwi senkronik ant sant done yo.

Kachèt distribiye (Infinspan)

Pou gwoup la travay kòrèkteman, gen plis senkronizasyon kalite kachèt sa yo lè l sèvi avèk JBoss Data Grid la:

Sesyon Otantifikasyon - yo itilize pou konsève pou done lè w ap otantifye yon itilizatè espesifik. Demann ki soti nan kachèt sa a anjeneral gen ladan sèlman navigatè a ak sèvè Keycloak la, pa aplikasyon an.

Tokens aksyon yo itilize pou senaryo kote itilizatè a bezwen konfime yon aksyon asynchrone (via imel). Pou egzanp, pandan yon koule modpas bliye, yo itilize kachèt actionTokens Infinispan pou kenbe tras metadata sou siy aksyon ki asosye yo te deja itilize, kidonk li pa kapab itilize ankò.

Cache ak envalid done ki pèsistan - yo itilize nan kachèt done ki pèsistan pou evite demann ki pa nesesè nan baz done a. Lè nenpòt sèvè Keycloak mete ajou done yo, tout lòt sèvè Keycloak nan tout sant done yo bezwen konnen sou li.

Travay - Yo itilize sèlman pou voye mesaj ki pa valab ant nœuds gwoup yo ak sant done yo.

Sesyon itilizatè - itilize pou estoke done sesyon itilizatè ki valab pou dire sesyon navigatè itilizatè a. Kachèt la dwe trete demann HTTP soti nan itilizatè final la ak aplikasyon an.

Pwoteksyon fòs brital - itilize pou swiv done sou koneksyon echwe.

Balanse chaj

Ekilib chaj la se yon sèl pwen antre nan keycloak epi li dwe sipòte sesyon kolan.

Sèvè aplikasyon yo

Yo itilize yo kontwole entèraksyon konpozan youn ak lòt epi yo ka virtualize oswa containerized lè l sèvi avèk zouti automatisation ki deja egziste ak dekale dinamik nan zouti automatisation enfrastrikti. Senaryo deplwaman ki pi komen nan OpenShift, Kubernates, Rancher.

Sa a konkli premye pati a - youn nan teyorik. Nan seri atik kap vini yo, yo pral analize egzanp entegrasyon ak plizyè founisè idantite ak egzanp anviwònman yo.

Sous: www.habr.com

Add nouvo kòmantè