{"id":40865,"date":"2020-02-05T10:07:04","date_gmt":"2020-02-05T07:07:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961"},"modified":"2020-02-05T10:07:04","modified_gmt":"2020-02-05T07:07:04","slug":"sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","title":{"rendered":"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In qualsiasi grande azienda, anche X5 Retail Group non fa eccezione, con il progresso aumentano i progetti che richiedono l'autenticazione degli utenti. Nel tempo, si rende necessario un passaggio fluido degli utenti da un'applicazione all'altra e sorge quindi la necessit\u00e0 di utilizzare un server Single Sign-On (SSO) unificato. Ma cosa fare quando provider di identit\u00e0 come AD o altri, privi di attributi aggiuntivi, sono gi\u00e0 utilizzati in vari progetti? A questo punto interviene una classe di sistemi chiamata \u00abbroker di identit\u00e0\u00bb. I rappresentanti pi\u00f9 funzionali sono quelli come Keycloak, Gravitee Access Management e altri. Le scenografie di utilizzo possono variare: interazione tra macchine, coinvolgimento degli utenti, ecc. La soluzione deve supportare funzionalit\u00e0 flessibili e scalabili, in grado di unire tutte le esigenze in un'unica piattaforma, e attualmente la nostra soluzione aziendale \u00e8 il broker di identit\u00e0 \u2013 Keycloak. <\/p>\n<p><img decoding=\"async\" alt=\"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a7f1d5f68fa5d07fc30f2804dc62bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKeycloak \u00e8 un prodotto open source progettato per l'identificazione e il controllo degli accessi, supportato da RedHat. \u00c8 la base per i prodotti dell'azienda che utilizzano SSO \u2013 RH-SSO.<\/p>\n<h3>Concetti di base <\/h3>\n<p>\nPrima di iniziare a esplorare soluzioni e approcci, \u00e8 necessario chiarire i termini e la sequenza dei processi:<\/p>\n<p><img decoding=\"async\" alt=\"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1\" src=\"\/wp-content\/uploads\/2020\/02\/3a83d4364425aeed1019662fd1d5f152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Identificazione<\/b> \u00e8 la procedura di riconoscimento di un soggetto tramite il suo identificatore (in parole semplici, questo significa determinare il nome, il login o il numero).<\/p>\n<p><b>Autenticazione<\/b> \u00e8 la procedura di autenticazione (l'utente viene verificato tramite una password, un'email viene controllata tramite firma elettronica, ecc.)<\/p>\n<p><b>Autenticazione<\/b> \u00e8 il processo di concessione dell'accesso a una risorsa (ad esempio, a un'email).<\/p>\n<h4>Il broker di identificazione Keycloak<\/h4>\n<p>\n<b>Keycloak<\/b> \u00e8 una soluzione open source per la gestione dell'identit\u00e0 e degli accessi, progettata per l'uso in sistemi informatici in cui possono essere impiegati modelli di architettura a microservizi.<\/p>\n<p>Keycloak offre funzionalit\u00e0 come accesso unico (SSO), broker di identit\u00e0 e accesso sociale, federazione utenti, adattatori client, console di amministrazione e console di gestione degli account.<\/p>\n<p>Funzionalit\u00e0 di base supportate in Keycloak:<\/p>\n<ul>\n<li>Single Sign-On e Single Sign-Out per applicazioni web.<\/li>\n<li>Supporto per OpenID\/OAuth 2.0\/SAML.<\/li>\n<li>Identity Brokering \u2013 autenticazione tramite provider di identit\u00e0 esterni OpenID Connect o SAML.<\/li>\n<li>Accesso sociale \u2013 supporto per Google, GitHub, Facebook, Twitter per l'identificazione degli utenti.<\/li>\n<li>Federazione utenti \u2013 sincronizzazione degli utenti da server LDAP e Active Directory e altri provider di identit\u00e0.<\/li>\n<li>Kerberos bridge \u2013 utilizzo del server Kerberos per l'autenticazione automatica degli utenti.<\/li>\n<li>Admin Console \u2013 per la gestione centralizzata delle impostazioni e delle configurazioni della soluzione tramite web.<\/li>\n<li>Account Management Console \u2013 per la gestione autonoma del profilo degli utenti.<\/li>\n<li>Personalizzazione della soluzione in base all'identit\u00e0 aziendale.<\/li>\n<li>Autenticazione 2FA \u2013 supporto TOTP\/HOTP tramite Google Authenticator o FreeOTP.<\/li>\n<li>Login Flows \u2013 possibilit\u00e0 di auto-registrazione degli utenti, recupero e reset della password e altre opzioni.<\/li>\n<li>Gestione delle sessioni \u2013 gli amministratori possono gestire le sessioni degli utenti da un'unica interfaccia.<\/li>\n<li>Token Mappers \u2013 associamento degli attributi utenti, dei ruoli e di altri attributi richiesti ai token.<\/li>\n<li>Gestione flessibile delle politiche tramite realm, applicazioni e utenti.<\/li>\n<li>Supporto CORS \u2013 gli adattatori client hanno il supporto CORS integrato.<\/li>\n<li>Interfacce del fornitore di servizi (SPI) \u2013 un ampio numero di SPI consente di configurare vari aspetti del funzionamento del server: flussi di autenticazione, provider di identit\u00e0, mappature di protocollo e molto altro.<\/li>\n<li>Adattatori client per applicazioni JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.<\/li>\n<li>Supporto per l'interazione con diverse applicazioni che utilizzano la libreria OpenID Connect Relying Party o la libreria SAML 2.0 Service Provider.<\/li>\n<li>Possibilit\u00e0 di estensione tramite plugin.<\/li>\n<\/ul>\n<p>\nPer i processi CI\/CD e per l'automazione della gestione in Keycloak, \u00e8 possibile utilizzare le API REST\/JAVA. La documentazione \u00e8 disponibile in formato elettronico: <\/p>\n<p>REST API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/rest-api\/index.html<\/a><\/noindex><br \/>\nAPI JAVA <noindex><a rel=\"nofollow\" href=\"https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html\">https:\/\/www.keycloak.org\/docs-api\/8.0\/javadocs\/index.html<\/a><\/noindex><\/p>\n<h4>Provider di identit\u00e0 a livello aziendale (On-Premise)<\/h4>\n<p>\nPossibilit\u00e0 di autenticazione degli utenti tramite servizi di User Federation.<\/p>\n<p><img decoding=\"async\" alt=\"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1\" src=\"\/wp-content\/uploads\/2020\/02\/59bbeaf4630855467ddb003d52b0c1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 possibile utilizzare anche l'autenticazione silos \u2014 se gli utenti si autenticano sulle stazioni di lavoro con Kerberos (LDAP o AD), possono essere automaticamente autenticati su Keycloak senza dover reinserire nome utente e password. <\/p>\n<p>Per l'autenticazione e la successiva autorizzazione degli utenti \u00e8 possibile utilizzare un database relazionale, il che \u00e8 particolarmente utile per gli ambienti di sviluppo, poich\u00e9 non richiede configurazioni e integrazioni lunghe nelle fasi iniziali dei progetti. Per impostazione predefinita, Keycloak utilizza un database integrato per memorizzare le impostazioni e i dati degli utenti.<\/p>\n<p>L'elenco dei database supportati \u00e8 ampio e include: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle e altri. I pi\u00f9 testati fino ad oggi sono Oracle 12C Release1 RAC e il cluster Galera 3.12 per MariaDB 10.1.19. <\/p>\n<h4>Provider di identit\u00e0 \u2014 accesso sociale <\/h4>\n<p>\n\u00c8 possibile utilizzare l'accesso tramite social network. Per attivare la possibilit\u00e0 di autenticare gli utenti, si utilizza la console di amministrazione Keycloak. Non \u00e8 necessario apportare modifiche al codice delle applicazioni, e questa funzionalit\u00e0 \u00e8 disponibile \"out of the box\" e pu\u00f2 essere attivata in qualsiasi fase di implementazione del progetto.<\/p>\n<p><img decoding=\"async\" alt=\"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1\" src=\"\/wp-content\/uploads\/2020\/02\/546ddea10c79662ca37a448d3dfc1fd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer l'autenticazione degli utenti \u00e8 possibile utilizzare fornitori di identit\u00e0 OpenID\/SAML.<\/p>\n<h3>Scenari tipici di autorizzazione utilizzando OAuth2 in Keycloak<\/h3>\n<p>\n<b>Authorization Code Flow <\/b> \u2014 utilizzato con applicazioni server-side. Uno dei tipi pi\u00f9 comuni di autorizzazione, poich\u00e9 \u00e8 ben adatto per le applicazioni server, in cui il codice sorgente dell'applicazione e i dati del cliente non sono accessibili a terzi. In questo caso, il processo si basa sul reindirizzamento. L'applicazione deve essere in grado di interagire con l'agente utente, come un browser web, per ricevere codici di autorizzazione API reindirizzati attraverso l'agente utente.<\/p>\n<p><b>Implicit Flow<\/b> \u2014 utilizzato da applicazioni mobili o web (applicazioni in esecuzione sul dispositivo dell'utente).<\/p>\n<p>Il tipo di autorizzazione implicita \u00e8 utilizzato da applicazioni mobili e web, dove non pu\u00f2 essere garantita la privacy del cliente. Il tipo di autorizzazione implicita utilizza anche il reindirizzamento dell'agente utente, in cui il token di accesso viene passato all'agente utente per un ulteriore utilizzo nell'applicazione. Questo rende il token accessibile all'utente e ad altre applicazioni sul dispositivo dell'utente. Con questo tipo di autorizzazione non viene effettuata autenticazione dell'applicazione, e l'intero processo si basa sull'URL di reindirizzamento (registrato in precedenza nel servizio).<\/p>\n<p>Il Flusso Implicito non supporta i token di aggiornamento del token di accesso (refresh tokens).<br \/>\n<br \/>\n<b>Flusso Client Credentials Grant<\/b> \u2014 vengono utilizzati quando un'applicazione accede a un'API. Questo tipo di autorizzazione \u00e8 generalmente usato per interazioni \"server-server\", che devono essere eseguite in background senza un'interazione immediata con l'utente. Il flusso di fornitura delle credenziali del cliente consente a un servizio web (cliente riservato) di utilizzare le proprie credenziali invece di un'identit\u00e0 dell'utente per l'autenticazione quando richiama un altro servizio web. Per un livello di sicurezza pi\u00f9 elevato, il servizio chiamante pu\u00f2 utilizzare un certificato (anzich\u00e9 un segreto condiviso) come credenziali.<\/p>\n<p>La specifica OAuth2 \u00e8 descritta in <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">RFC-6749<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc8259\">RFC-8252<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6819\">RFC-6819<\/a><\/noindex><\/p>\n<h3>Token JWT e i suoi vantaggi<\/h3>\n<p>\nJWT (JSON Web Token) \u2014 uno standard aperto (<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc7519\">https:\/\/tools.ietf.org\/html\/rfc7519<\/a><\/noindex>), che definisce un modo compatto e autonomo per la trasmissione sicura di informazioni tra le parti sotto forma di oggetto JSON.<\/p>\n<p>Secondo lo standard, il token \u00e8 composto da tre parti in formato base-64, separate da punti. La prima parte \u00e8 chiamata intestazione (header), che contiene il tipo di token e il nome dell'algoritmo di hash utilizzato per generare la firma digitale. La seconda parte contiene le informazioni principali (utente, attributi, ecc.). La terza parte \u00e8 la firma digitale.<\/p>\n<p>..<br \/>\nNon conservare mai il token nel tuo database. Un token valido \u00e8 equivalente a una password; memorizzarlo significa trattarlo come una password in chiaro.<br \/>\n<b>Access-token <\/b>\u00e8 un token che fornisce al suo proprietario accesso a risorse protette del server. Di solito ha una breve durata e pu\u00f2 contenere informazioni aggiuntive, come l'indirizzo IP della parte che richiede il token.<\/p>\n<p><b>Refresh-token <\/b>\u00e8 un token che consente ai client di richiedere nuovi access-token una volta scaduti. Questi token vengono generalmente emessi per periodi pi\u00f9 lunghi.<\/p>\n<p>Principali vantaggi nell'applicazione in un'architettura a microservizi:<\/p>\n<ul>\n<li>Possibilit\u00e0 di accedere a diverse applicazioni e servizi tramite un'unica autenticazione.<\/li>\n<li>In assenza di alcuni attributi richiesti nel profilo utenti, \u00e8 possibile arricchire i dati aggiungendo informazioni che possono essere integrate, anche in modo automatizzato e \"al volo\".<\/li>\n<li>Non \u00e8 necessario conservare informazioni sulle sessioni attive, l'applicazione server deve solo verificare la firma.<\/li>\n<li>Maggiore flessibilit\u00e0 nella gestione degli accessi grazie ad attributi aggiuntivi nel payload.<\/li>\n<li>L'uso della firma del token per l'intestazione e il payload aumenta la sicurezza complessiva della soluzione.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Token JWT \u2014 composizione<\/h3>\n<p>\n<b>Intestazione<\/b> \u2014 di default, l'intestazione contiene solo il tipo di token e l'algoritmo utilizzato per la crittografia.<\/p>\n<p>Il tipo di token \u00e8 memorizzato nella chiave \u00abtyp\u00bb. La chiave \u00abtyp\u00bb \u00e8 ignorata nel JWT. Se la chiave \u00abtyp\u00bb \u00e8 presente, il suo valore deve essere JWT, per indicare che questo oggetto \u00e8 un JSON Web Token.<\/p>\n<p>La seconda chiave \u00abalg\u00bb determina l'algoritmo utilizzato per crittografare il token. Di default, deve essere impostato su HS256. L'intestazione \u00e8 codificata in base64.<\/p>\n<p>{ &quot;alg&quot;: &quot;HS256&quot;, &quot;typ&quot;: &quot;JWT&quot;}<br \/>\n<b>Payload (contenuto)<\/b> \u2014 nel payload si trova qualsiasi informazione da verificare. Ogni chiave nel payload \u00e8 conosciuta come \"affermazione\". Ad esempio, \u00e8 possibile accedere all'applicazione solo su invito (promozione chiusa). Quando vogliamo invitare qualcuno a partecipare, gli inviamo un'email di invito. \u00c8 importante verificare che l'indirizzo email appartenga alla persona che accetta l'invito, quindi includeremo questo indirizzo nel payload, conservandolo sotto la chiave \"e-mail\".<\/p>\n<p>{ &quot;email&quot;: &quot;example@x5.ru&quot; }<br \/>\n<br \/>\nLe chiavi nel payload possono essere arbitrarie. Tuttavia, ci sono alcune riservate:<\/p>\n<ul>\n<li>iss (Issuer) \u2014 determina l'applicazione da cui viene inviato il token.<\/li>\n<li>sub (Subject) \u2014 determina il soggetto del token.<\/li>\n<li>aud (Audience) \u2013 un array di stringhe sensibili al maiuscolo\/minuscolo o URI, che costituisce l'elenco dei destinatari di questo token. Quando il destinatario riceve un JWT con questa chiave, deve verificare la propria presenza nell'elenco dei destinatari; in caso contrario, deve ignorare il token.<\/li>\n<li>exp (Expiration Time) \u2014 indica quando scade la validit\u00e0 del token. Lo standard JWT richiede che, in tutte le sue implementazioni, i token scaduti vengano rifiutati. La chiave exp deve essere un timestamp in formato unix.<\/li>\n<li>nbf (Not Before) \u2014 \u00e8 un timestamp in formato unix che definisce il momento in cui il token diventa valido.<\/li>\n<li>iat (Issued At) \u2014 questa chiave rappresenta il momento in cui il token \u00e8 stato emesso e pu\u00f2 essere utilizzata per determinare l'et\u00e0 del JWT. La chiave iat deve essere un timestamp in formato unix.<\/li>\n<li>Jti (JWT ID) \u2014 una stringa che definisce l'identificatore unico di questo token, facendo distinzione tra maiuscole e minuscole.<\/li>\n<\/ul>\n<p>\n\u00c8 importante comprendere che il payload non viene trasmesso in forma crittografata (anche se i token possono essere annidati e quindi \u00e8 possibile trasmettere dati crittografati). Pertanto, non \u00e8 possibile memorizzare informazioni segrete al suo interno. Come l'intestazione, il payload \u00e8 codificato in base64.<br \/>\n<b>Firma<\/b> \u2014 quando abbiamo l'intestazione e il payload, possiamo calcolare la firma.<\/p>\n<p>I codici sono codificati in base64: intestazione e payload, uniti in una stringa tramite un punto. Questa stringa e la chiave segreta vengono quindi inserite nell'algoritmo di crittografia specificato nell'intestazione (chiave \"alg\"). Qualsiasi stringa pu\u00f2 essere utilizzata come chiave. Stringhe pi\u00f9 lunghe sono preferibili, poich\u00e9 richiedono pi\u00f9 tempo per essere decifrate.<\/p>\n<p>{&quot;alg&quot;:&quot;RSA1_5&quot;,\u201cpayload&quot;:&quot;A128CBC-HS256&quot;}<\/p>\n<h3>Costruzione dell'architettura di un cluster Keycloak ad alta disponibilit\u00e0<\/h3>\n<p>\nUtilizzando un singolo cluster per tutti i progetti, si presentano maggiori requisiti per la soluzione SSO. Quando il numero di progetti \u00e8 limitato, queste esigenze non si fanno sentire cos\u00ec fortemente per tutti i progetti; tuttavia, con l'aumento degli utenti e delle integrazioni, aumentano anche i requisiti per l'accessibilit\u00e0 e le prestazioni. <\/p>\n<p>Aumentare i rischi di fallimento di un SSO unico aumenta i requisiti architetturali della soluzione e dei metodi di backup dei componenti, portando a un SLA molto rigido. Per questo motivo, nella fase di progettazione o nelle fasi iniziali di implementazione delle soluzioni, i progetti spesso dispongono di un'infrastruttura non ridondante. Con l'evoluzione \u00e8 necessario considerare le capacit\u00e0 di sviluppo e scalabilit\u00e0. \u00c8 pi\u00f9 flessibile costruire un cluster di alta disponibilit\u00e0 utilizzando la virtualizzazione a container o un approccio ibrido. <\/p>\n<p>Per operare in modalit\u00e0 Active\/Active e Active\/Passive in un cluster, \u00e8 necessario garantire la coerenza dei dati in un database relazionale: entrambi i nodi del database devono essere replicati in modo sincrono tra i diversi data center geograficamente distribuiti.<\/p>\n<p>Il pi\u00f9 semplice esempio di installazione resiliente.<\/p>\n<p><img decoding=\"async\" alt=\"SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1\" src=\"\/wp-content\/uploads\/2020\/02\/c0df30a07e7dda5ae892a1fca3790a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuali vantaggi offre l'uso di un cluster unico:<\/p>\n<ul>\n<li>Alta disponibilit\u00e0 e prestazioni.<\/li>\n<li>Supporto per modalit\u00e0 operative: Active\/Active, Active\/Passive.<\/li>\n<li>Possibilit\u00e0 di scalabilit\u00e0 dinamica \u2014 utilizzando la virtualizzazione a container.<\/li>\n<li>Possibilit\u00e0 di gestione e monitoraggio centralizzati.<\/li>\n<li>Un approccio unificato per l'identificazione\/autenticazione\/autorizzazione degli utenti nei progetti.<\/li>\n<li>Un'interazione pi\u00f9 trasparente tra progetti diversi senza la necessit\u00e0 degli utenti.<\/li>\n<li>Possibilit\u00e0 di riutilizzare il token JWT in vari progetti.<\/li>\n<li>Unico punto di fiducia.<\/li>\n<li>Avvio pi\u00f9 rapido dei progetti grazie all'uso di microservizi\/virtualizzazione dei container (non \u00e8 necessaria l'installazione e la configurazione di componenti aggiuntivi).<\/li>\n<li>Possibilit\u00e0 di acquisire supporto commerciale dal fornitore. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Cosa considerare nella pianificazione di un cluster.<\/h3>\n<p><\/p>\n<h4>DBMS<\/h4>\n<p>\nKeycloak utilizza un sistema di gestione del DBMS per memorizzare: realms, clients, users, ecc.<br \/>\nSupporta una vasta gamma di DBMS: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak viene fornito con un proprio database relazionale integrato. Si raccomanda l'uso per ambienti poco caricati, come gli ambienti di sviluppo.<\/p>\n<p>Per operare in modalit\u00e0 Active\/Active e Active\/Passive, \u00e8 necessario garantire la coerenza dei dati nel database relazionale e entrambi i nodi del cluster dei database sono replicati sincronicamente tra i data center.<\/p>\n<h4>Cache distribuita (Infinspan)<\/h4>\n<p>\nPer il corretto funzionamento del cluster \u00e8 necessaria una sincronizzazione aggiuntiva dei seguenti tipi di cache utilizzando JBoss Data Grid:<\/p>\n<p>Sessioni di autenticazione \u2014 utilizzate per memorizzare i dati durante l'autenticazione di un particolare utente. Le richieste da questa cache solitamente includono solo il browser e il server Keycloak, e non l'applicazione.<\/p>\n<p>Token di azione \u2014 utilizzati in scenari in cui l'utente deve confermare un'azione in modo asincrono (via email). Ad esempio, durante il flusso di ripristino della password, la cache actionTokens Infinispan \u00e8 utilizzata per tracciare i metadati sui token d'azione correlati che sono gi\u00e0 stati utilizzati, pertanto non possono essere riutilizzati.<\/p>\n<p>Caching e invalidazione dei dati persistenti \u2013 utilizzati per memorizzare nella cache i dati permanenti, cos\u00ec da evitare richieste superflue al database. Quando un server Keycloak aggiorna i dati, tutti gli altri server Keycloak in tutti i datacenter devono esserne informati.<\/p>\n<p>Work \u2014 utilizzato solo per inviare messaggi di invalidazione tra i nodi del cluster e i datacenter. <\/p>\n<p>Le sessioni utente \u2014 vengono utilizzate per salvare i dati delle sessioni utente che rimangono validi durante la sessione del browser dell'utente. La cache deve gestire le richieste HTTP dall'utente finale e dalle applicazioni. <\/p>\n<p>Protezione contro attacchi di forza bruta \u2014 serve per monitorare i dati sui tentativi di accesso non riusciti. <\/p>\n<h4>Bilanciamento del carico<\/h4>\n<p>\nIl bilanciatore di carico \u00e8 il punto di ingresso unico in Keycloak e deve supportare le sticky sessions. <\/p>\n<h4>Server delle applicazioni<\/h4>\n<p>\nVengono utilizzati per controllare l'interazione tra i componenti e possono essere virtualizzati o contenitorizzati utilizzando gli strumenti di automazione esistenti e il scaling dinamico delle infrastrutture. Gli scenari di distribuzione pi\u00f9 comuni includono OpenShift, Kubernetes, Rancher.<\/p>\n<p>Questa \u00e8 la prima parte \u2014 teorica \u2014 del contenuto. Nei prossimi cicli di articoli verranno esaminati esempi di integrazioni con diversi fornitori di identificazione e impostazioni.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/486778\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":40866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40865","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T07:07:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47SSO su architettura a microservizi. Utilizziamo Keycloak. Parte n. 1 | ProHoster","description":"In ogni grande azienda, compresa X5 Retail Group, con il progresso aumenta il numero di progetti che richiedono l'autenticazione degli utenti. Con il passare del tempo, diventa necessario un passaggio fluido degli utenti da un'applicazione all'altra, rendendo essenziale l'uso di un server di Single Sign-On (SSO). Ma come comportarsi quando provider di identificazione come AD o altri, non possiedono ulteriori","canonical_url":"https:\/\/prohoster.info\/it\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47SSO \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Keycloak. \u0427\u0430\u0441\u0442\u044c \u21161 | ProHoster","og:description":"\u0412 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 X5 Retail Group \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Single-Sing-On (SSO). \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u0430\u043a AD \u0438\u043b\u0438 \u0438\u043d\u044b\u0435, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438","og:url":"https:\/\/prohoster.info\/it\/blog\/sso-na-mikroservisnoj-arhitekture-ispolzuem-keycloak-chast-%e2%84%961","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T07:07:04+00:00","article:modified_time":"2020-02-05T07:07:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40865","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:46:14","updated":"2022-09-27 14:28:39"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/40865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=40865"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/40865\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/40866"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=40865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=40865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=40865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}