SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Sa bisan unsang dako nga kompanya, ug ang X5 Retail Group dili eksepsiyon, samtang kini nag-uswag, ang gidaghanon sa mga proyekto nga nanginahanglan pagtugot sa tiggamit nagdugang. Sa paglabay sa panahon, gikinahanglan ang walay hunong nga pagbalhin sa mga tiggamit gikan sa usa ka aplikasyon ngadto sa lain, ug unya kinahanglan nga mogamit sa usa ka server nga Single-Sing-On (SSO). Apan komosta kung ang mga taghatag sa identidad sama sa AD o uban pa nga wala’y dugang nga mga hiyas gigamit na sa lainlaing mga proyekto. Ang usa ka klase sa mga sistema nga gitawag og "identification brokers" moabut aron sa pagluwas. Ang labing magamit mao ang mga representante niini, sama sa Keycloak, Gravitee Access management, ug uban pa. Kasagaran, ang mga kaso sa paggamit mahimong lahi: interaksyon sa makina, partisipasyon sa user, ug uban pa. ug ang ingon nga mga solusyon ang among kompanya karon adunay usa ka timailhan nga broker - Keycloak.

SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Ang Keycloak usa ka open source identity ug access control nga produkto nga gimintinar sa RedHat. Kini ang basehan sa mga produkto sa kompanya gamit ang SSO - RH-SSO.

Mga batakang konsepto

Sa dili ka pa magsugod sa pag-atubang sa mga solusyon ug mga pamaagi, kinahanglan ka magdesisyon sa mga termino ug han-ay sa mga proseso:

SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Pagkilala usa ka pamaagi sa pag-ila sa usa ka hilisgutan pinaagi sa iyang identifier (sa laing pagkasulti, kini ang kahulugan sa usa ka ngalan, login o numero).

Pagpanghimatuud - kini usa ka pamaagi sa pag-authenticate (ang user gisusi gamit ang password, ang sulat gisusi gamit ang electronic signature, ug uban pa)

Awtorisasyon - kini ang probisyon sa pag-access sa usa ka kapanguhaan (pananglitan, sa e-mail).

Identity Broker Keycloak

keycloak mao ang usa ka bukas nga gigikanan nga identidad ug solusyon sa pagdumala sa pag-access nga gidisenyo alang sa paggamit sa IS diin magamit ang mga pattern sa arkitektura sa microservice.

Ang Keycloak nagtanyag og mga feature sama sa single sign-on (SSO), brokered identity ug social login, user federation, client adapters, admin console ug account management console.

Panguna nga pagpaandar nga gisuportahan sa Keycloak:

  • Single-Sign On ug Single-Sign Out para sa mga aplikasyon sa browser.
  • Suporta para sa OpenID/OAuth 2.0/SAML.
  • Identity Brokering - pag-authenticate gamit ang external OpenID Connect o SAML identity providers.
  • Social Login - Google, GitHub, Facebook, Twitter nga suporta alang sa pag-ila sa user.
  • User Federation - pag-synchronize sa mga tiggamit gikan sa LDAP ug Active Directory server ug uban pang identity providers.
  • Kerberos bridge - gamit ang Kerberos server para sa awtomatik nga user authentication.
  • Admin Console - alang sa hiniusang pagdumala sa mga setting ug mga kapilian sa solusyon pinaagi sa Web.
  • Account Management Console - alang sa pagdumala sa kaugalingon sa profile sa gumagamit.
  • Pag-customize sa solusyon base sa corporate identity sa kompanya.
  • 2FA Authentication - suporta sa TOTP/HOTP gamit ang Google Authenticator o FreeOTP.
  • Login Flows - pagrehistro sa kaugalingon sa user, pagbawi sa password ug pag-reset, ug uban pa posible.
  • Pagdumala sa Sesyon - ang mga administrador makadumala sa mga sesyon sa tiggamit gikan sa usa ka punto.
  • Mga Token Mapper - nagbugkos sa mga hiyas sa tiggamit, mga tahas ug uban pang gikinahanglan nga mga hiyas sa mga token.
  • Flexible nga pagdumala sa palisiya sa tibuok gingharian, aplikasyon ug tiggamit.
  • Suporta sa CORS - Ang mga adaptor sa kliyente adunay built-in nga suporta sa CORS.
  • Mga Interface sa Service Provider (SPI) - Daghang gidaghanon sa mga SPI nga nagtugot kanimo sa pag-customize sa lain-laing mga aspeto sa server: authentication flows, identity providers, protocol mapping, ug uban pa.
  • Mga adaptor sa kliyente alang sa mga aplikasyon sa JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Suporta alang sa pagtrabaho uban sa lain-laing mga aplikasyon nga nagsuporta sa OpenID Connect Relying Party library o SAML 2.0 Service Provider Library.
  • Mapalapad gamit ang mga plugins.

Alang sa mga proseso sa CI / CD, ingon man ang automation sa mga proseso sa pagdumala sa Keycloak, ang REST API / JAVA API mahimong magamit. Ang dokumentasyon magamit sa elektronik nga paagi:

PAHULAY 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

Enterprise Identity Provider (On-Premise)

Abilidad sa pag-authenticate sa mga tiggamit pinaagi sa mga serbisyo sa User Federation.

SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Ang pass-through authentication mahimo usab nga gamiton - kung ang mga tiggamit mag-authenticate batok sa mga workstation nga adunay Kerberos (LDAP o AD), nan mahimo silang awtomatiko nga ma-authenticate sa Keycloak nga dili kinahanglan nga mosulod pag-usab sa ilang username ug password.

Alang sa panghimatuud ug dugang nga pagtugot sa mga tiggamit, posible nga mogamit usa ka relational nga DBMS, nga labing magamit alang sa mga palibot sa pag-uswag, tungod kay wala kini nag-apil sa taas nga mga setting ug panagsama sa una nga mga yugto sa mga proyekto. Sa kasagaran, ang Keycloak naggamit sa usa ka built-in nga DBMS sa pagtipig sa mga setting ug data sa user.

Ang listahan sa gisuportahan nga DBMS kay lapad ug naglakip sa: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ug uban pa. Ang labing nasulayan hangtod karon mao ang Oracle 12C Release1 RAC ug Galera 3.12 cluster para sa MariaDB 10.1.19.

Mga taghatag sa identidad - sosyal nga pag-login

Posible nga mogamit usa ka login gikan sa mga social network. Aron ma-aktibo ang abilidad sa pag-authenticate sa mga tiggamit, gamita ang Keycloack admin console. Ang mga pagbag-o sa code sa aplikasyon wala kinahanglana ug kini nga gamit magamit sa gawas sa kahon ug mahimong ma-aktibo sa bisan unsang yugto sa proyekto.

SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Posible nga gamiton ang OpenID/SAML Identity providers para sa user authentication.

Kasagaran nga mga senaryo sa pagtugot gamit ang OAuth2 sa Keycloak

Agos sa Kodigo sa Awtorisasyon - gigamit sa mga aplikasyon sa kilid sa server. Usa sa labing kasagaran nga mga tipo sa pagtugot sa pagtugot tungod kay kini haum kaayo alang sa mga aplikasyon sa server diin ang source code sa aplikasyon ug data sa kliyente dili magamit sa mga tagagawas. Ang proseso niini nga kaso gibase sa redirection. Ang aplikasyon kinahanglan nga makahimo sa pagpakigsulti sa usa ka user agent (user-agent), sama sa usa ka web browser - aron makadawat sa API authorization codes nga gi-redirect pinaagi sa user agent.

implicit nga dagan - gigamit sa mga aplikasyon sa mobile o web (mga aplikasyon nga nagdagan sa aparato sa gumagamit).

Ang implicit authorization permiso type kay gigamit sa mobile ug web applications diin dili magarantiya ang confidentiality sa kliyente. Ang implicit nga permiso nga tipo naggamit usab sa user agent redirection, diin ang access token ipasa ngadto sa user agent para sa dugang nga paggamit sa aplikasyon. Gihimo niini ang token nga magamit sa tiggamit ug uban pang mga aplikasyon sa aparato sa tiggamit. Kini nga tipo sa pagtugot sa pagtugot wala magpamatuod sa pagkatinuod sa aplikasyon, ug ang proseso mismo nagsalig sa usa ka redirect URL (kaniadto narehistro sa serbisyo).

Ang Implicit Flow dili mosuporta sa access token refresh tokens.

Daloy sa Paghatag sa Mga Kredensyal sa Kliyente - gigamit kung ang aplikasyon maka-access sa API. Kini nga matang sa pagtugot sa pagtugot kasagarang gigamit alang sa mga interaksyon sa server-to-server nga kinahanglan buhaton sa background nga wala’y diha-diha nga interaksyon sa tiggamit. Ang dagan sa paghatag sa mga kredensyal sa kliyente nagtugot sa usa ka serbisyo sa web (kompidensyal nga kliyente) sa paggamit sa kaugalingon nga mga kredensyal imbis nga magpakaaron-ingnon sa usa ka tiggamit aron mapamatud-an kung nagtawag sa lain nga serbisyo sa web. Alang sa mas taas nga lebel sa seguridad, posible nga ang serbisyo sa pagtawag mogamit usa ka sertipiko (imbes usa ka gipaambit nga sekreto) ingon usa ka kredensyal.

Ang detalye sa OAuth2 gihulagway sa
RFC-6749
RFC-8252
RFC-6819

JWT token ug ang mga benepisyo niini

Ang JWT (JSON Web Token) usa ka bukas nga sumbanan (https://tools.ietf.org/html/rfc7519) nga naghubit sa usa ka compact ug self-contained nga paagi sa luwas nga pagbalhin sa impormasyon tali sa mga partido isip JSON nga butang.

Sumala sa sumbanan, ang token naglangkob sa tulo ka bahin sa base-64 nga format, nga gibulag sa mga tuldok. Ang unang bahin gitawag nga header, nga naglangkob sa matang sa token ug ang ngalan sa hash algorithm alang sa pagkuha sa usa ka digital nga pirma. Ang ikaduha nga bahin nagtipig sa sukaranan nga kasayuran (gumagamit, mga hiyas, ug uban pa). Ang ikatulo nga bahin mao ang digital nga pirma.

. .
Ayaw pagtago ug token sa imong DB. Tungod kay ang usa ka balido nga token katumbas sa usa ka password, ang pagtipig sa token sama sa pagtipig sa password sa tin-aw nga teksto.
Access token mao ang usa ka timaan nga naghatag sa tag-iya niini og access sa pagsiguro sa mga kapanguhaan sa server. Kasagaran kini adunay mubo nga kinabuhi ug mahimong magdala og dugang nga kasayuran sama sa IP address sa partido nga nangayo sa token.

I-refresh ang token usa ka timaan nga nagtugot sa mga kliyente sa paghangyo og bag-ong mga token sa pag-access pagkahuman sa ilang kinabuhi. Kini nga mga token kasagarang gi-isyu sa taas nga panahon.

Ang nag-unang bentaha sa paggamit sa microservice architecture:

  • Kaarang sa pag-access sa lainlaing mga aplikasyon ug serbisyo pinaagi sa usa ka higayon nga pag-authenticate.
  • Kung wala ang daghang gikinahanglan nga mga kinaiya sa profile sa gumagamit, posible nga mapauswag ang mga datos nga mahimong idugang sa payload, lakip ang awtomatiko ug on-the-fly.
  • Dili kinahanglan nga tipigan ang kasayuran bahin sa mga aktibo nga sesyon, ang aplikasyon sa server kinahanglan ra nga susihon ang pirma.
  • Mas flexible nga kontrol sa pag-access pinaagi sa dugang nga mga hiyas sa payload.
  • Ang paggamit sa usa ka token signature alang sa header ug payload nagdugang sa seguridad sa solusyon sa kinatibuk-an.

JWT token - komposisyon

Pangulo - pinaagi sa default, ang header naglangkob lamang sa tipo sa token ug ang algorithm nga gigamit alang sa pag-encrypt.

Ang tipo sa token gitipigan sa "typ" key. Ang "type" nga yawe wala tagda sa JWT. Kung naa ang "typ" key, ang kantidad niini kinahanglan nga JWT aron ipakita nga kini nga butang usa ka JSON Web Token.

Ang ikaduhang yawe nga "alg" naghubit sa algorithm nga gigamit sa pag-encrypt sa token. Kini kinahanglan nga ibutang sa HS256 pinaagi sa default. Ang ulohan gi-encode sa base64.

{ "alg": "HS256", "type": "JWT"}
payload (sulod) - ang payload nagtipig sa bisan unsang impormasyon nga kinahanglang susihon. Ang matag yawe sa payload nailhan nga usa ka "claim". Pananglitan, makasulod ka sa aplikasyon pinaagi lamang sa imbitasyon (sirado nga promo). Kon gusto namong imbitahon ang usa ka tawo sa pag-apil, padalhan namo sila ug sulat imbitasyon. Importante nga susihon nga ang email address iya sa tawo nga midawat sa imbitasyon, mao nga atong ilakip kini nga address sa payload, alang niini atong ibutang kini sa "email" nga yawe

{ "email": "[protektado sa email]"}

Ang mga yawe sa payload mahimong arbitraryo. Bisan pa, adunay pipila nga gireserba:

  • iss (Issuer) - Gipaila ang aplikasyon diin gipadala ang token.
  • sub (Subject) - naghubit sa hilisgutan sa timaan.
  • Ang aud (Audience) usa ka han-ay sa case-sensitive nga mga string o URI nga usa ka lista sa mga nakadawat niini nga token. Kung ang nakadawat nga bahin makadawat usa ka JWT nga adunay gihatag nga yawe, kinahanglan nga susihon niini ang presensya sa kaugalingon sa mga nakadawat - kung dili ibaliwala ang token.
  • exp (Oras sa Pag-expire) - Nagpakita kung kanus-a matapos ang token. Ang sumbanan sa JWT nanginahanglan sa tanan nga mga pagpatuman niini nga isalikway ang mga na-expire nga mga token. Ang exp key kinahanglang timestamp sa unix format.
  • Ang nbf (Dili Kaniadto) usa ka oras sa unix format nga nagtino sa higayon nga ang token mahimong balido.
  • iat (Gi-isyu Sa) - Kini nga yawe nagrepresentar sa panahon nga ang token gi-isyu ug mahimong gamiton aron mahibal-an ang edad sa JWT. Ang yawe sa iat kinahanglan nga usa ka timestamp sa unix format.
  • Jti (JWT ID) β€” usa ka pisi nga naghubit sa talagsaon nga tig-ila niini nga timaan, sensitibo sa kaso.

Importante nga masabtan nga ang payload wala ipadala sa naka-encrypt nga porma (bisan pa ang mga token mahimong magsalag ug posible nga ipadala ang naka-encrypt nga datos). Busa, dili kini makatago sa bisan unsang sekretong impormasyon. Sama sa header, ang payload kay base64 nga naka-encode.
Pirma - kung naa tay titulo ug payload, makwenta nato ang pirma.

Base64-encoded: header ug payload gikuha, sila gihiusa ngadto sa usa ka hilo pinaagi sa usa ka tulbok. Unya kini nga hilo ug ang sekreto nga yawe gisulod sa encryption algorithm nga gipiho sa header ("alg" key). Ang yawe mahimong bisan unsang hilo. Mas pilion ang mas taas nga mga kuwerdas tungod kay mas dugay kini makuha.

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

Pagtukod ug Keycloak Failover Cluster Architecture

Kung gigamit ang usa ka cluster para sa tanan nga mga proyekto, adunay dugang nga mga kinahanglanon alang sa solusyon sa SSO. Kung gamay ra ang gidaghanon sa mga proyekto, kini nga mga kinahanglanon dili kaayo mamatikdan alang sa tanan nga mga proyekto, bisan pa, nga adunay pagtaas sa gidaghanon sa mga tiggamit ug mga panagsama, ang mga kinahanglanon alang sa pagkaanaa ug pagtaas sa pasundayag.

Ang pagdugang sa peligro sa usa ka kapakyasan sa SSO nagdugang sa mga kinahanglanon alang sa arkitektura sa solusyon ug ang mga pamaagi nga gigamit alang sa mga sobra nga sangkap ug nagdala sa usa ka hugot nga SLA. Niining bahina, mas kanunay sa panahon sa pag-uswag o sa sayong mga yugto sa pagpatuman sa mga solusyon, ang mga proyekto adunay kaugalingon nga imprastraktura nga wala’y sayup. Samtang nag-uswag ang pag-uswag, gikinahanglan nga ibutang ang mga oportunidad alang sa pag-uswag ug pag-scale. Labing kadali ang paghimo og failover cluster gamit ang container virtualization o hybrid nga pamaagi.

Aron makatrabaho sa Active/Active ug Active/Passive cluster modes, gikinahanglan aron maseguro ang data consistency sa relational database - ang duha ka database nodes kinahanglang dungan nga makopya tali sa lain-laing geo-distributed data centers.

Ang pinakasimple nga pananglitan sa usa ka fault-tolerant nga pag-instalar.

SSO sa microservice nga arkitektura. Gigamit namo ang Keycloak. Bahin #1

Unsa ang mga kaayohan sa paggamit sa usa ka cluster:

  • Taas nga magamit ug pasundayag.
  • Suporta alang sa operating mode: Aktibo / Aktibo, Aktibo / Passive.
  • Abilidad sa dinamikong pag-scale - kung gigamit ang virtualization sa sulud.
  • Posibilidad sa sentralisadong pagdumala ug pagmonitor.
  • Nahiusa nga pamaagi alang sa pag-ila / panghimatuud / pagtugot sa mga tiggamit sa mga proyekto.
  • Mas transparent nga interaksyon tali sa lain-laing mga proyekto nga walay pag-apil sa user.
  • Ang abilidad sa paggamit pag-usab sa JWT token sa lain-laing mga proyekto.
  • Usa ka punto sa pagsalig.
  • Mas paspas nga paglansad sa mga proyekto gamit ang microservices/container virtualization (dili kinahanglan nga ipataas ug i-configure ang dugang nga mga sangkap).
  • Posible ang pagpalit sa komersyal nga suporta gikan sa vendor.

Unsa ang Pangitaon Kung Magplano og Cluster

DBMS

Ang Keycloak naggamit sa usa ka sistema sa pagdumala sa database aron tipigan: mga gingharian, mga kliyente, mga tiggamit, ug uban pa.
Gisuportahan ang usa ka halapad nga DBMS: MS SQL, Oracle, MySQL, PostgreSQL. Ang Keycloak adunay kaugalingon nga built-in nga relational database. Kini girekomendar nga gamiton alang sa dili-loaded nga mga palibot - sama sa development environment.

Aron magtrabaho sa Active/Active ug Active/Passive cluster modes, gikinahanglan ang data consistency sa relational database, ug ang duha ka database cluster nodes dungan nga gikopya tali sa data centers.

Giapod-apod nga cache (Infinspan)

Aron molihok ang cluster sa husto, gikinahanglan ang dugang nga pag-synchronize sa mosunod nga mga matang sa cache gamit ang JBoss Data Grid:

Mga sesyon sa pag-authenticate - gigamit sa pagtipig sa datos kung nagpamatuod sa usa ka piho nga tiggamit. Ang mga hangyo gikan niini nga cache kasagarang naglakip lamang sa browser ug sa Keycloak server, dili sa aplikasyon.

Ang mga token sa aksyon gigamit alang sa mga senaryo diin ang tiggamit kinahanglan nga kumpirmahon ang usa ka aksyon nga asynchronously (pinaagi sa email). Pananglitan, sa panahon sa usa ka kalimtan nga dagan sa password, ang actionTokens Infinispan cache gigamit sa pagsubay sa metadata mahitungod sa mga kaubang aksyon token nga gigamit na, mao nga dili na kini magamit pag-usab.

Caching ug invalidation sa padayon nga data - gigamit sa pag-cache sa padayon nga datos aron malikayan ang wala kinahanglana nga mga pangutana sa database. Kung ang bisan unsang Keycloak server nag-update sa datos, ang tanan nga uban pang mga Keycloak server sa tanan nga mga sentro sa datos kinahanglan mahibal-an bahin niini.

Trabaho - Gigamit lamang sa pagpadala sa dili balido nga mga mensahe tali sa mga cluster node ug mga sentro sa datos.

Mga sesyon sa gumagamit - gigamit sa pagtipig sa datos bahin sa mga sesyon sa gumagamit nga balido sa gidugayon sa sesyon sa browser sa gumagamit. Kinahanglang iproseso sa cache ang mga hangyo sa HTTP gikan sa end user ug sa aplikasyon.

Proteksyon sa brute force - gigamit sa pagsubay sa datos bahin sa mga napakyas nga pag-login.

Pagbalanse sa load

Ang load balancer mao ang single entry point sa keycloak ug kinahanglang mosuporta sa mga sticky session.

Mga Server sa Aplikasyon

Gigamit kini aron makontrol ang interaksyon sa mga sangkap sa usag usa ug mahimong virtualized o containerized gamit ang naa na nga mga himan sa automation ug dinamikong pag-scale sa mga tool sa automation sa imprastraktura. Ang labing kasagaran nga mga senaryo sa pag-deploy sa OpenShift, Kubernates, Rancher.

Gitapos niini ang unang bahin - ang teoretikal. Sa sunod nga serye sa mga artikulo, ang mga panig-ingnan sa mga panagsama sa lainlaing mga taghatag sa identidad ug mga pananglitan sa mga setting pagatukion.

Source: www.habr.com

Idugang sa usa ka comment