Kaj je Keycloak in kako ga namestiti korak za korakom

Zadnja posodobitev: 08/01/2026
Avtor: Isaac
  • Keycloak je ponudnik identitet z odprto kodo, ki centralizira preverjanje pristnosti, avtorizacijo in enotno prijavo (SSO) za več aplikacij z uporabo OAuth 2.0, OpenID Connect in SAML.
  • Njegov model področij, uporabnikov, skupin in vlog omogoča prilagodljivo upravljanje identitet in dovoljenj, vključno z zvezo z zunanjimi imeniki, kot so LDAP, Active Directory ali Azure AD.
  • Lahko se namesti na Docker, Kubernetes ali računalnike. Linux s PostgreSQL in skaliranjem v visoki razpoložljivosti za povratnimi proxyji in uravnalniki obremenitve, kot sta Nginx in Keepalived.
  • Žetone JWT, ki jih izda Keycloak, je mogoče prilagoditi z uporabo maperjev, kar omogoča natančne varnostne modele, ki jih je mogoče enostavno integrirati v sodobne API-je in aplikacije.

Upravljanje identitete in dostopa Keycloak

V skoraj vsaki sodobni aplikaciji, ki jo uporabljate vsakodnevno (e-pošta, družbeni mediji, korporativni intraneti, nadzorne plošče za stranke itd.) v ozadju deluje sistem, ki odloča, kdo ste in do česa lahko dostopate. Ko podjetja začnejo kopičiti aplikacije, storitve in API-je, postane ročno upravljanje uporabnikov, gesel, dovoljenj in sej prava nadloga.

Keycloak se pojavi ravno pravi čas, da razreši to zmešnjavo.Keycloak je platforma za upravljanje identitet in dostopa, ki centralizira preverjanje pristnosti, avtorizacijo in enotno prijavo za več aplikacij. Namesto da bi vsaka aplikacija implementirala svoj sistem za prijavo, vlogo in obnovitev gesla, Keycloak obravnava vse to, aplikacije pa mu preprosto zaupajo z uporabo standardov, kot so OAuth 2.0, OpenID Connect ali SAML 2.0.

Kaj je Keycloak in kakšno vlogo igra pri varnosti IAM?

Keycloak je odprtokodni ponudnik identitete (IdP).Napisan je v Javi in ​​ga vzdržuje Red Hat (prej JBoss), licenciran pa je pod Apache 2.0, zato ga je mogoče prosto uporabljati in prilagajati tudi v komercialnih okoljih. Obstaja plačljiva različica za podjetja, imenovana Red Hat Single Sign-On, vendar je osnovna funkcionalnost enaka.

Ta strežnik identitet zagotavlja enotno prijavo (SSO), federacijo in večnajemniško delovanje.Uporabniku omogoča enkratno prijavo in dostop do več aplikacij, pri čemer te aplikacije prenesejo preverjanje pristnosti na Keycloak, upravljanje uporabnikov, skupin, atributov in dovoljenj pa se izvaja centralno, brez ponovne implementacije kolesa v vsakem projektu.

Keycloak izstopa od drugih rešitev IAM (brezplačni, odprtokodni ali lastniški) glede na njihovo zrelost, sprejetost in združljivost s standardnimi protokoli. Kljub temu bo prava rešitev za vsako organizacijo odvisna od njenih potreb (komercialna podpora, SLA, specifične funkcionalnosti, namestitev na lokaciji v primerjavi s SaaS itd.).

Ena od prednosti Keycloaka Združuje več komponent: overjanje na osnovi OAuth 2.0 in OpenID Connect, podporo za SAML 2.0, prijavo prek družbenih omrežij (google, Facebook , GitHub itd.), integracija z LDAP in Active Directory, upravljanje prek spletne konzole, CLI in REST API ter prilagodljiv model uporabnikov, skupin in vlog, ki se odražajo v žetonih, izdanih za aplikacije.

Strežnik Keycloak in povezane aplikacije

Zahtevane osnove: OAuth 2.0, OpenID Connect in JWT

Da bi popolnoma razumeli, kaj Keycloak počne, je koristno imeti jasno predstavo o treh konceptih.OAuth 2.0, OpenID Connect (OIDC) in JSON Web Tokens (JWT). Ni vam treba postati strokovnjak, morate pa razumeti splošni koncept, saj se vse vrti okoli njih.

OAuth 2.0 kot ogrodje za avtorizacijo

OAuth 2.0 je standardni okvir za avtorizacijo API-jev.Uporabljajo ga velikani, kot so Google, Facebook, Microsoft, GitHub in LinkedIn, njegova glavna funkcija pa je omogočiti aplikaciji (odjemalcu) dostop do uporabnikovih virov v drugi aplikaciji ali API-ju z uporabnikovim izrecnim dovoljenjem, brez nenehnega deljenja poverilnic.

Namesto pošiljanja uporabniškega imena in gesla v vsaki zahteviOAuth 2.0 uvaja koncept dostopnega žetona: kratkotrajnega dostopnega žetona, ki se pošlje v HTTP klicih API-ju in ga API potrdi. Ponudnik identitete (na primer Keycloak) izda ta žeton po preverjanju identitete in soglasja uporabnika.

Standard opredeljuje več tokov avtorizacije (vrste odobritve) prilagoditi postopek vrsti stranke: varne zaledne aplikacije, SPA-ji v brskalniku, aplikacije mobilne naprave, omejene naprave, komunikacija med napravami itd. Vsak tok označuje, kaj se izmenja v posameznem koraku (avtorizacijske kode, žetoni, poverilnice itd.).

Štiri temeljne vloge OAuth 2.0 Zvok:

  • Lastnik vira: običajno uporabnik, čigar podatke želite pregledati ali spremeniti.
  • Pomočaplikacija (spletna, mobilna, Internet stvari, zaledni sistem ...), ki želi delovati v imenu uporabnika.
  • strežnik virov: API, ki razkrije podatke in preveri dostopne žetone.
  • avtorizacijski strežnik: IdP (Keycloak), ki overi uporabnika in izda žetone.

Poleg tega OAuth 2.0 uvaja koncept obsegov (scopes).Ta določajo obseg dovoljenj, ki jih uporabnik podeli aplikaciji: branje e-pošte, objavljanje na družbenih omrežjih, dostop do osnovnega profila itd. Izdani žeton kodira, katera dovoljenja so bila dejansko dodeljena odjemalcu.

OpenID Connect: identitetna plast na vrhu OAuth 2.0

OpenID Connect (OIDC) dodaja identiteto v OAuth 2.0Medtem ko se OAuth ukvarja z avtorizacijo (kaj lahko aplikacija naredi), se OIDC ukvarja s standardiziranim prepoznavanjem, kdo je overjeni uporabnik in kako pridobiti njegove osnovne podatke.

  9 načinov, kako skriti svoj naslov IP

OIDC definira dobro znane končne točke in metapodatke, kot je na primer dokument o odkritju, objavljen na poti /.well-known/openid-configuration kjer ponudnik določi URL-je za avtorizacijo, žeton, javne ključe, uporabniške podatke itd. To omogoča skoraj samodejno konfiguracijo aplikacij.

Zagotavlja tudi končno točko UserInfo.To se uporablja za pridobivanje informacij od overjenega uporabnika (ime, e-pošta itd.) z uporabo veljavnega dostopnega žetona. V integracijah, ki temeljijo na Keycloaku, je zelo pogosto, da se ti podatki preberejo po prijavi za izpolnjevanje uporabniških profilov v aplikaciji.

Žeton za dostop in spletni žetoni JSON (JWT)

V mnogih sodobnih implementacijah je access_token JWT. (JSON Web Token). To je standard (RFC 7519) za predstavitev zahtevkov kot digitalno podpisanega JSON-a, v treh delih, ločenih s pikami: glava, koristni tovor in podpis, vsi kodirani v Base64URL.

Glava vsebuje tehnične informacije o žetonu. (algoritem podpisa, vrsta žetona in pogosto identifikator uporabljenega ključa, kidKoristni tovor vsebuje zahtevke, kot so:

  • exp: datum poteka veljavnosti.
  • iat: čas oddajanja.
  • issizdajatelj, običajno URL ponudnika identitete.
  • spodaj: enolični identifikator uporabnika.
  • aud: občinstvo, ki mu je žeton namenjen.
  • jti: enolični identifikator žetona.

Podpis se ustvari z zasebnim ali tajnim ključem.Zato vsaka sprememba žetona pokvari podpis in se zazna med preverjanjem. API pridobi javni ključ od ponudnika identitetnih storitev (IdP) zaradi lastnosti jwks_uri iz dokumenta o odkritju, ki kaže na datoteko JSON, ki vsebuje seznam javnih ključev in njihove kid.

Keycloak omogoča tudi prilagajanje izdanih žetonovDodatne zahteve je mogoče dodati na podlagi uporabniških atributov, skupin, vlog ali celo fiksnih vrednosti. To se naredi z uporabo maperjev, konfiguriranih za vsakega odjemalca ali za vsak obseg odjemalca, kar API-jem olajša prejemanje točno tistih informacij, ki jih potrebujejo.

OAuth2 OpenID Connect in shema JWT

Arhitektura Keycloak: področja, uporabniki, skupine in vloge

Keycloak organizira svojo konfiguracijo v RealmsTo so kot »strežniki virtualne identitete« znotraj ene same namestitve. Drugi ponudniki nekaj podobnega imenujejo najemnik ali imenik. Vsako področje ima svoje neodvisne uporabnike, skupine, odjemalce, pravilnike in nastavitve.

Privzeto obstaja posebno področje, imenovano masterTa račun naj bo rezerviran za globalna skrbniška opravila, kot sta ustvarjanje in upravljanje drugih področij. Skrbniški uporabnik lahko upravlja več področij iz iste konzole, ne da bi se moral za vsako prijaviti z različnimi računi.

Lokalne uporabnike je mogoče definirati znotraj področjadodeljevanje atributov po meri, združevanje in povezovanje z vlogami. Model je skrbno zasnovan tako, da se ustrezne informacije na koncu odražajo v žetonih, ki jih uporablja aplikacija (vloge, skupine, podatki profila, varnostne zastavice itd.).

Skupine omogočajo hierarhično organizacijo uporabnikov.Skupina ima lahko podskupine (podskupine), uporabnik pa podeduje atribute in vloge vseh skupin, ki jim pripada, vključno s svojimi starši. To omogoča zelo prilagodljive modele avtorizacije, ne da bi bilo treba ponavljati konfiguracije za vsakega uporabnika.

Kar zadeva vloge, obstajata dve glavni ravni:

  • Vloge v svetu: globalne vrednosti znotraj področja, ki se pogosto uporabljajo za dovoljenja za navzkrižno uporabo lastnosti.
  • Vloge strank: specifično za določeno aplikacijo, kar omogoča natančnost za vsako storitev.

Keycloak podpira sestavljene vlogeTo pomeni vloge, ki vključujejo druge vloge. To pomaga pri združevanju dovoljenj in njihovem hkratnem dodeljevanju uporabnikom ali skupinam, čeprav je najbolje, da tega ne pretiravate, da se izognete zapletanju upravljanja ali vplivanju na delovanje.

Namestitev Keycloaka v razvojnem načinu: Docker, Kubernetes in VM

Za nastavitev laboratorijskega okolja s Keycloakom Na voljo je več preprostih možnosti: Dockerjev kontejner, namestitev na Kubernetes (na primer z Minikube) ali klasična namestitev na virtualni stroj z Linuxom in OpenJDK.

Keycloak v Dockerju

Najhitrejši način za zagon Keycloaka za testiranje Vključuje zagon vsebnika z uradno sliko, razkritje vrat 8080 in posredovanje uporabniškega imena in gesla skrbnika prek okoljskih spremenljivk, zagon v način start-dev (brez HTTPS in z vgrajeno bazo podatkov H2):

Z enim samim Dockerjevim ukazom delujoč strežnik je pridobljen v http://localhost:8080, dovolj za urejanje skrbniške konzole, ustvarjanje področij, uporabnikov, odjemalcev in testiranje osnovnih integracij.

Keycloak v Kubernetesu z Minikubeom

Če že delate s Kubernetes, lahko preprosto namestite Keycloak. Z uporabo vzorčnih manifestov iz uradnega repozitorija ustvarite namestitev in storitev ter nato odprete tunel z Minikube za dostop do storitve iz vašega računalnika, običajno spet na vratih 8080.

  Datoteke CPI – definicija, značilnosti, uporaba, združljivi programi

Ta pristop je idealen za simulacijo okolij, ki so bližje proizvodnji. (s podi, storitvami, zunanjo konfiguracijo itd.) in eksperimentirati z nadzorovanimi uvajanji, skaliranjem in nadgradnjami Keycloaka v gručah K8s.

Keycloak v Ubuntuju z OpenJDK in PostgreSQL (napredni način za razvijalce)

Druga možnost je namestitev Keycloaka na virtualni stroj Ubuntu Uporaba OpenJDK in lokalne baze podatkov PostgreSQL s samopodpisanim potrdilom in imenom gostitelja po meri. Čeprav je še vedno testni scenarij, se vse bolj približuje produkcijski topologiji.

Tipični koraki vključujejo:

  • Posodobite operacijski sistem in namestite Javo (na primer OpenJDK 11 ali novejšo različico).
  • Namestite PostgreSQL (idealno na ločen strežnik, čeprav je v laboratoriju lahko na istem računalniku).
  • Ustvarite posebnega uporabnika in bazo podatkov za Keycloak ter mu dodelite ustrezne privilegije.
  • Ustvarite sistemskega uporabnika brez privilegijev (npr. keycloak) za zagon storitve.
  • Prenesite uradno distribucijo Keycloak in jo razpakirajte v /opt/keycloak in prilagodite dovoljenja.
  • Ustvarite samopodpisano potrdilo X.509 z openssl in ga nastavite keycloak.conf skupaj s parametri povezave PostgreSQL in hostname želeno.
  • Definiraj enoto sistemd Če želite Keycloak zagnati v razvojnem načinu ob zagonu sistema, nastavite skrbniške poverilnice prek okoljskih spremenljivk.

Ko je storitev zagnana in delujeObičajno je dostop do njega prek HTTPS na vratih 8443 z konfiguriranim imenom gostitelja. Če se uporablja samopodpisano potrdilo, mu je treba zaupati v brskalniku (z uvozom overitelja potrdil ali samega potrdila v shrambo zaupanja vrednih potrdil naprave).

Namestitev in uvajanje Keycloaka

Napredne uvedbe: visoka razpoložljivost, PostgreSQL in obratni proxy

Ko se premaknemo iz laboratorija v proizvodnjoSlika se spremeni: razmisliti morate o visoki razpoložljivosti, robustni trajnosti podatkov, veljavnih potrdilih in pogosto o obratnem proxyju, ki centralizira dostop HTTPS in uravnoteženje obremenitve.

Precej pogost vzorec je namestitev več vozlišč Keycloak za uravnalnikom obremenitve (npr. Nginx) in z uporabo baze podatkov PostgreSQL v načinu HA kot zalednega sistema. Cilj je odpraviti posamezne točke odpovedi tako za aplikacijsko kot za podatkovno plast.

Pri tej vrsti arhitekture se običajno sledijo koraki, kot so naslednji::

  • Pripravite posodobljene strežnike Linux (Debian/Ubuntu) in namestite odvisnosti: unzip, wget, openjdk, openssl, Itd
  • Ustvarite sistemskega uporabnika keycloak z domom v /opt/keycloak in brez privilegiranih interaktivnih dovoljenj za prijavo.
  • Prenesite želeno različico programa Keycloak, jo razpakirajte in dodelite lastništvo namenskemu uporabniku.
  • V PostgreSQL ustvarite specifično bazo podatkov z ustreznim uporabnikom in privilegiji, pri čemer prilagodite tudi lastnika sheme in privzeta dovoljenja za tabele.
  • Za vozlišča Keycloak ustvarite samopodpisana potrdila (ali uporabite potrdila notranjega overitelja potrdil) in konfigurirajte HTTPS na aplikacijskem strežniku.
  • Prilagodite keycloak.conf Za povezavo s PostgreSQL VIP definirajte vrata HTTP/HTTPS, potrdila, parametre proxyja, ime gostitelja, sklad gruče (npr. UDP) in ravni dnevnika.
  • Definiraj storitev systemd preprosto to škorenj Ključavnica z kc.sh start o kc.sh start --optimizedupravljanje samodejnih ponovnih zagonov v primeru napak.

Nginx se običajno uporablja na vrhu objavljanja in uravnavanja obremenitve. kot povratni proxy HTTPS, z lastnim potrdilom TLS in konfiguracijo za nadgradnjo, ki kaže na vozlišča Keycloak na njegovih zalednih vratih (običajno 8080, če je TLS zaključen v Nginxu).

Za odpravo posameznih točk odpovedi v uravnotežnikuObičajno se dve vozlišči Nginx v visoki razpoložljivosti konfigurirata z uporabo Keepalived. To orodje upravlja plavajoči virtualni IP (VIP), ki je na enem od strežnikov oglaševan kot glavni in v primeru okvare preklopi na rezervno vozlišče, s čimer se ohranja neprekinjena storitev.

Nastavitev registracije področja, uporabnikov in aplikacij (odjemalcev)

Ko zaženemo in zaženemo Keycloak, je naslednji logičen korak Vključuje ustvarjanje področja za naše uporabnike in aplikacije ter od tam definiranje uporabnikov, skupin, vlog in odjemalcev (aplikacij, ki bodo preverjanje pristnosti prenesle na Keycloak).

Novo področje je ustvarjeno v skrbniški konzoli. Preprosto z vnosom njegovega imena. Od tega trenutka naprej bomo imeli izoliran prostor z lastnimi nastavitvami. Med prvimi prilagoditvami so običajno uporabne naslednje:

  • Konfigurirajte SMTP za pošiljanje e-pošte (preverjanje e-pošte, obnovitev gesla, obvestila).
  • Omogočite po želji Deklarativni uporabniški profil, ki vam omogoča, da deklarativno določite, katere atribute bo imel uporabnik, katera preverjanja veljajo in ali jih lahko uporabnik ureja.
  • Prilagodite parametre prijave: dovolite ali preklopite samoregistracijo, zapomnite si sejo med ponovnimi zagoni brskalnika, dovolite obnovitev gesla itd.

Ustvarjanje uporabnika v področju je tako preprosto kot izpolnjevanje obrazca Potrebovali boste uporabniško ime, e-poštni naslov, ime in priimek. Nato na zavihku s poverilnicami nastavite geslo (začasno ali trajno). Tam lahko dodelite skupine, vloge in dodatne atribute.

  Odpravite napako TSL Handshake Failed

Keycloak ponuja namensko konzolo za račune za končne uporabnike.kjer si lahko ogledajo in spremenijo podatke svojega profila, spremenijo geslo, pregledajo aktivne seje ali upravljajo dodatne dejavnike preverjanja pristnosti. To je zelo priročen način, da uporabniku prenesejo nekatere osnovne funkcije upravljanja svojega računa.

Poosebljanje je še ena zanimiva lastnost.Skrbnik z dovoljenjem lahko iz konzole "pooseblja" uporabnika, da reproducira težave, preveri dovoljenja itd., ne da bi potreboval uporabnikovo geslo.

Da aplikacija uporablja Keycloak kot ponudnika identitete (IdP)Registriran mora biti kot odjemalec. V razdelku Odjemalci se ustvari nov ID odjemalca, vrsta je označena kot OpenID Connect (razen če se uporablja SAML) in izbrani so dovoljeni tokovi OAuth 2.0: Standardni tok (koda za avtorizacijo), Neposredna dovoljenja za dostop (geslo), Implicitno, Poverilnice odjemalca (računi storitev), Koda naprave, CIBA itd.

Odloča tudi konfiguracija odjemalca Če je potrebno preverjanje pristnosti odjemalca (skrivnost odjemalca ali potrdila), kateri URI-ji za preusmeritev so veljavni in kateri spletni izvori so dovoljeni (zelo pomembno v SPA zaradi pravilnikov CORS). Od tam lahko aplikacija uporabi uradne knjižnice ali knjižnice tretjih oseb za prenos preverjanja pristnosti na Keycloak prek OIDC.

Integracija z zunanjimi imeniki in drugimi ponudniki identitet

Keycloak lahko deluje kot lokalni vir identitete (uporabniki, skupine in vloge, definirane v lastni bazi podatkov) ali pa lahko deluje kot posrednik identitete za enega ali več zunanjih ponudnikov.

Zelo pogosta integracija je z Azure Active Directory.Azure AD shranjuje poslovne uporabnike in skupine, Keycloak pa se poveže kot odjemalec OIDC za prenos identitet in skupin ter jih preslika na lokalne uporabnike in vloge. S tem se izognemo podvajanju identitet in skrbniških opravil na več lokacijah.

Na splošno velja, da za uporabo Azure AD kot zunanjega ponudnika identitet naredi se naslednje:

  • Registrirajte aplikacijo v storitvi Azure AD, pridobite njen ID odjemalca in ustvarite skrivnost odjemalca.
  • V storitvi Azure AD konfigurirajte URI-je za preusmeritev na Keycloak (končna točka posrednika OIDC v ustreznem področju).
  • Prilagodite zahtevke, ki bodo izdani v žetonu v aplikaciji Azure AD, na primer tako, da vključite uporabniške skupine.
  • V Keycloaku ustvarite ponudnika identitete OpenID Connect, ki kaže na končne točke Azure (avtorizacija, žeton, odjava, uporabniške informacije) in konfigurira ID odjemalca, skrivnost odjemalca in želene parametre za prijavo.

Ko se med njima vzpostavi zaupanjeKo se uporabnik prijavi prek Azure AD, Keycloak ustvari (ali sinhronizira) uporabnika lokalno in lahko z naprednimi preslikalniki preslika skupine Azure v vloge Keycloak. Na primer, skupino »Razvijalci« v Azure je mogoče prevesti v vlogo »Razvijalci« v Keycloaku, ki se nato uvede v integrirane aplikacije in storitve (kot je Jenkins).

Poleg Azure AD Keycloak omogoča tudi združevanje identitet z LDAP, klasični Active Directory, drugi OIDC IdP-ji, ponudniki družbenih omrežij (Google, Facebook, GitHub itd.) in drugo, z možnostjo hkratnega mešanja več virov znotraj istega področja.

Dodatna varnost: boti, CAPTCHA in najboljše prakse

Čeprav Keycloak močno okrepi varnost preverjanja pristnosti (MFA, pravilniki o geslih, zaklepanje računov, nadzor sej itd.), strani za prijavo, registracijo in obnovitev gesla ostajajo jasne tarče botov in avtomatiziranih napadov.

Za ublažitev teh vrst groženjPriporočljivo je kombinirati Keycloak z mehanizmi proti botom, kot so rešitve CAPTCHA, skladne z GDPR, ki razlikujejo med človeškim in avtomatiziranim prometom, ne da bi pri tem ogrozile uporabniško izkušnjo. Te rešitve so običajno integrirane v obrazce za prijavo in registracijo, kar doda dodatno plast zaščite pred napadi z zapolnjevanjem poverilnic, množičnim ustvarjanjem računov ali zlorabo postopkov za obnovitev gesel.

Poleg CAPTCHA so med drugim dobre prakse monitor dnevniki za dostop, nastavite opozorila za nenavadne poraste neuspelih poskusov, občasno pregledujte izdane žetone in njihovo trajanje, zagotovite, da so zunanjim izpostavljene le potrebne končne točke, in posodabljajte Keycloak in njegove odvisnosti z najnovejšimi varnostnimi popravki.

Celoten ekosistem funkcionalnosti (SSO, večnajemniška platforma, integracija z zunanjimi imeniki, konfigurirani žetoni, uvajanje z visoko razpoložljivostjo in zaščita pred boti) naredi Keycloak zelo zmogljivo orodje za centralizacijo preverjanja pristnosti in avtorizacije za sodobne aplikacije, kar podjetjem pomaga okrepiti varnostno držo, ne da bi pri tem žrtvovali uporabniško izkušnjo ali nenehno na novo izumljali upravljanje identitet.