Qual è il modo migliore per migrare da Keycloak self-hosted a una soluzione IAM gestita senza perdere gli utenti esistenti
"Senza perdere gli utenti esistenti" significa due cose diverse, e confonderle è il motivo per cui molte migrazioni si bloccano a metà. La prima è non perdere le identità: account, ruoli, appartenenze, storico, riferimenti applicativi — ed è un problema risolto, si esporta e si effettua il provisioning via API. La seconda è non chiedere agli utenti di rifare qualcosa — tipicamente reimpostare la password — ed è il vero vincolo di progetto. La strategia che risolve entrambe è la convivenza temporanea via federazione, con cutover applicazione per applicazione e rientro sempre possibile.
Passo 1 — Inventario: cosa c'è davvero nel realm
Le migrazioni da Keycloak raramente falliscono sugli utenti. Falliscono su una personalizzazione dimenticata: un mapper che aggiunge un claim su cui un'applicazione fa un controllo di autorizzazione, un tema modificato, una required action personalizzata, uno SPI scritto tre anni fa da qualcuno che non lavora più lì.
| Elemento | Cosa verificare | Rischio se lo salti |
|---|---|---|
| Realm | Quanti sono e perché sono separati | Si replica una separazione che non serve più, o se ne perde una necessaria |
| Client | Tipo, flussi abilitati, redirect URI, durata token | Redirect URI non allineati: il login fallisce al primo tentativo reale |
| Ruoli realm e client | Chi li assegna e quali applicazioni li leggono | Autorizzazioni silenziosamente diverse dopo il cutover |
| Gruppi e attributi | Quali attributi finiscono nei token | Un claim mancante rompe un controllo lato applicazione |
| Protocol mapper | Claim personalizzati e loro consumatori | È l'elemento dimenticato più frequente |
| Identity provider | Federazioni verso Entra ID, Google, IdP SAML | Vanno ricreate e riconfigurate lato IdP |
| User federation (LDAP/AD) | Se gli utenti vivono altrove | Cambia radicalmente la strategia: la sorgente autorevole non è Keycloak |
| Temi e personalizzazioni | Pagine di login, email, traduzioni | Riemergono come richieste urgenti dopo il cutover |
| Estensioni SPI | Codice custom nel processo di autenticazione | Va tradotto in logica applicativa o in policy |
| Required actions | Azioni imposte al primo login | Comportamenti attesi che spariscono senza spiegazione |
Passo 2 — Esportare e mappare i concetti
L'export del realm produce la configurazione completa in JSON: è l'inventario formale su cui costruire la mappa, ed è anche il documento da archiviare prima di toccare qualsiasi cosa.
# Esportazione completa di un realm su file
bin/kc.sh export --dir /tmp/export --realm my-realm --users realm_file
# Il risultato contiene client, ruoli, gruppi, mapper,
# identity provider e utenti del realm.| Concetto Keycloak | Corrispondente LoginMaster | Note sulla traduzione |
|---|---|---|
| Realm | Tenant | Un realm per cliente diventa un tenant isolato crittograficamente |
| Client | Progetto | Ogni applicazione ha la propria chiave e le proprie policy di sicurezza |
| Client secret | Project key / API key | La chiave di progetto serve al login, la API key alle operazioni amministrative |
| Realm role / client role | Ruolo di progetto | Da rivedere: la migrazione è l'occasione per eliminare i ruoli non più usati |
| Group | Ruolo o attributo del soggetto | I gruppi profondamente annidati vanno appiattiti in modo esplicito |
| User | Subject di tipo user | Correlato tramite un identificativo esterno stabile |
| Service account | Subject di tipo device / API key | Le integrazioni machine-to-machine cambiano modello |
| Identity provider | Federazione del tenant | Da riconfigurare anche lato Entra ID o Google, con nuovi redirect URI |
| Protocol mapper | Mappatura claim → ruoli | Il claim personalizzato va ricostruito o spostato nell'applicazione |
| Admin REST API | REST API + SDK TypeScript e .NET | Le automazioni esistenti vanno riscritte, non tradotte meccanicamente |
| Tema personalizzato | Configurazione white-label del tenant | Da configurazione anziché da codice |
Passo 3 — Le tre strategie, e come si sceglie
| Strategia | Come funziona | Costo per l'utente | Quando ha senso |
|---|---|---|---|
| Importazione unica con cutover | Si importa tutto e si commuta il traffico in una finestra | Deve reimpostare le credenziali | Basi utenti piccole, utenti interni, finestra di manutenzione accettabile |
| Migrazione progressiva al login | L'utente entra ancora dal vecchio sistema, e alla prima autenticazione l'identità viene creata sul nuovo | Nessuno, finché il vecchio sistema è raggiungibile | Basi utenti grandi con utenti attivi frequentemente |
| Convivenza tramite federazione | Il nuovo sistema diventa il punto di ingresso e federa il vecchio come identity provider a monte | Nessuno: l'esperienza di login non cambia | Scenario più comune: base utenti mista, applicazioni multiple, nessuna finestra di fermo |
La terza strategia è quella che risponde letteralmente alla domanda "senza perdere gli utenti", perché disaccoppia i due problemi: prima si spostano le applicazioni, poi — con calma e senza scadenza imposta — si spostano le credenziali. Nel frattempo tutto funziona.
Il capitolo credenziali, senza giri di parole
Qui va detta una cosa che le pagine commerciali tendono a saltare. Keycloak conserva gli hash delle password nel proprio formato, con i propri parametri. Una piattaforma costruita sul principio che nessuno — nemmeno il fornitore — possa accedere o sostituire le credenziali di un utente non importa hash provenienti da un altro sistema: le credenziali in LoginMaster sono stabilite dall'utente, protette con Argon2 e split-salt fra tenant e cloud, e non esiste una funzione che le imposti per suo conto.
È un vincolo reale, ed è lo stesso che rende impossibile a un amministratore compromesso prendere il controllo degli account. Le conseguenze pratiche sono tre, e vanno messe nel piano:
- Gli utenti federati non sono interessati: si autenticano presso Entra ID, Google Workspace o l'IdP aziendale, e per loro la migrazione è trasparente.
- Gli utenti con credenziali locali stabiliscono la propria password sul nuovo sistema attraverso i canali verificati già registrati, come per un normale rinnovo.
- La convivenza via federazione permette di spalmare questo passaggio nel tempo invece di concentrarlo in una data, che è ciò che rende accettabile il progetto.
Passo 4 — Costruire il tenant di destinazione
La tentazione è replicare la configurazione esistente il più fedelmente possibile. È l'errore che porta con sé anni di debito: ruoli non più usati, client di applicazioni dismesse, mapper che alimentano claim che nessuno legge più.
- 1Crea il tenant e imposta le policy di base: durata sessione, requisiti password, tipi di secondo fattore ammessi, domini email autorizzati.
- 2Crea un progetto per ogni applicazione realmente attiva, non per ogni client presente nel realm.
- 3Ricrea solo i ruoli effettivamente assegnati a qualcuno negli ultimi dodici mesi, e documenta gli altri come eliminati.
- 4Imposta la policy 2FA per progetto: è l'occasione per rendere obbligatorio il secondo fattore sui pannelli amministrativi, cosa che in Keycloak spesso era rimasta opzionale.
- 5Configura il white-label: logo, colori, template email, dominio. Sostituisce i temi personalizzati e non richiede build né deploy.
Passo 5 — Migrare le identità e collaudare con un pilota
Il provisioning dei soggetti si fa via REST API o SDK, con un identificativo esterno stabile che permette di rieseguire l'operazione senza creare duplicati.
POST /v1/projects/prj_12ab/subjects HTTP/1.1
Host: api.loginmaster.it
Authorization: Bearer ak_live_••••••••
Content-Type: application/json
{
"type": "user",
"externalId": "kc-9f2a7c1e",
"roles": ["member"]
}Come externalId conviene usare l'identificativo Keycloak dell'utente, non l'email: rende la riconciliazione fra i due sistemi deterministica per tutta la durata della convivenza. La procedura completa, inclusa l'idempotenza e la gestione degli errori, è in Provisioning e ciclo di vita degli utenti via REST API e SDK.
Il pilota
- Scegli un'applicazione a basso rischio ma reale: un'applicazione di test non produce i problemi che ti servono.
- Coinvolgi da venti a cinquanta utenti veri, di reparti diversi, non solo il team tecnico.
- Verifica l'intero ciclo: login, sessione, rinnovo, logout, secondo fattore, recupero, revoca.
- Misura i ticket generati: è il dato che dimensiona il supporto necessario per il cutover generale.
- Fai durare il pilota almeno due settimane: alcuni problemi compaiono solo alla scadenza della prima sessione lunga.
Passo 6 — Cutover applicazione per applicazione
Il cutover simultaneo di tutte le applicazioni concentra tutti i rischi in un'unica finestra e rende impossibile capire quale problema appartiene a quale integrazione. Una alla volta, con una finestra di osservazione in mezzo.
- 1Ordina le applicazioni dal rischio più basso al più alto, tenendo per ultime quelle con più utenti esterni.
- 2Prima del cutover, verifica che il rientro sia realmente eseguibile: riporta la configurazione precedente in un ambiente di prova e provala.
- 3Sposta l'applicazione, osserva per almeno tre giorni lavorativi, poi passa alla successiva.
- 4Monitora tre indicatori: tasso di login riusciti, ticket aperti, errori applicativi sulla verifica del token.
- 5Comunica ogni spostamento in anticipo, anche quando per l'utente non cambia nulla: un login che appare diverso senza preavviso genera segnalazioni di phishing.
Passo 7 — Dismettere Keycloak
- Metti l'installazione in sola lettura invece di spegnerla: il rientro resta possibile senza ripristini.
- Mantienila per una finestra definita, tipicamente da trenta a novanta giorni dopo l'ultimo cutover.
- Archivia l'export del realm e la documentazione della mappa dei concetti: sono l'evidenza di cosa è stato migrato e come.
- Solo dopo, spegni l'infrastruttura e chiudi le voci di costo: macchine, database, backup, certificati, monitoraggio.
- Aggiorna il registro dei trattamenti e la documentazione di sicurezza: la sorgente delle identità è cambiata.
Cosa cambia davvero, oltre alla piattaforma
Keycloak è un ottimo prodotto. Il motivo per cui si migra raramente è una sua mancanza funzionale: è il costo operativo di gestirlo, che è reale e non compare in nessuna riga di licenza.
| Voce | Keycloak self-hosted | IAM gestito |
|---|---|---|
| Licenza | Nessun costo | Canone per tenant e progetto |
| Infrastruttura | Macchine, database, bilanciatore, ambienti di test | Inclusa |
| Alta disponibilità | Da progettare e mantenere | Inclusa |
| Aggiornamenti | Release frequenti, migrazioni major non banali | A carico del fornitore |
| Vulnerabilità | Monitoraggio e patch a carico del team | A carico del fornitore |
| Reperibilità | Il login è un servizio critico: serve un presidio | Sul fornitore |
| Competenza specifica | Concentrata su poche persone, difficile da sostituire | Non richiesta internamente |
| Costo al crescere degli utenti | Solo infrastruttura | Per tenant e progetto, utenti illimitati |
| Isolamento multi-tenant | Un realm per cliente, isolamento logico | Isolamento crittografico per tenant e progetto |
| Poteri dell'amministratore | L'admin del realm può resettare credenziali e 2FA | Nessun amministratore può farlo |
Le ultime due righe sono le differenze architetturali, non economiche, e sono quelle che alcune organizzazioni scoprono di volere solo dopo aver compilato il questionario di sicurezza di un cliente enterprise. Il confronto esteso è su alternativa a Keycloak, il quadro generale dei percorsi di migrazione su migrazione IAM, e il confronto sul costo totale di possesso nell'articolo Keycloak self-hosted vs IAM gestito.
Chi ha scritto questa guida
LoginMaster è la piattaforma IAM di CDBKR S.r.l., società italiana che progetta e gestisce infrastruttura di autenticazione per software house, MSP e organizzazioni enterprise europee. Il percorso descritto — inventario, mappa dei concetti, pilota, cutover progressivo con rientro disponibile — è quello che il team applica nei progetti di migrazione, incluso il capitolo sulle credenziali, che viene affrontato all' inizio proprio perché determina il calendario. Per una valutazione sul proprio realm: contatti.
Domande frequenti
La convivenza temporanea tramite federazione: la nuova piattaforma diventa il punto di ingresso e federa Keycloak come identity provider a monte, così le applicazioni si spostano una alla volta mentre gli utenti continuano ad accedere come prima. Le identità si migrano via REST API con un identificativo esterno stabile, il cutover avviene applicazione per applicazione con una finestra di osservazione fra una e l'altra, e Keycloak resta in sola lettura per trenta-novanta giorni come percorso di rientro.
Gli utenti federati no: si autenticano presso Entra ID, Google Workspace o l'IdP aziendale e per loro la migrazione è trasparente. Gli utenti con credenziali locali stabiliscono la propria password sul nuovo sistema tramite i canali verificati già registrati, perché LoginMaster non importa hash provenienti da altri sistemi: le credenziali sono stabilite dall'utente e non esiste una funzione per impostarle per suo conto. La convivenza via federazione consente di distribuire questo passaggio nel tempo invece di concentrarlo in una data.
Perché importare hash altrui richiede un percorso tecnico per scrivere credenziali per conto dell'utente, e quel percorso è esattamente ciò che consente a un amministratore compromesso di prendere il controllo degli account. Le due proprietà — migrazione trasparente delle password e impossibilità architetturale di sostituirle — non possono coesistere. È un compromesso che conviene valutare all'inizio del progetto e non a metà.
Un realm diventa un tenant isolato crittograficamente, un client diventa un progetto con la propria chiave e le proprie policy di sicurezza, i ruoli realm e client diventano ruoli di progetto, i gruppi diventano ruoli o attributi del soggetto, gli identity provider diventano federazioni del tenant e i temi personalizzati diventano configurazione white-label anziché codice. I service account passano al modello dei soggetti device con API key, e le automazioni scritte sull'Admin REST API vanno riscritte sulle REST API e sugli SDK TypeScript e .NET.
Quasi mai sugli utenti. Falliscono sulle personalizzazioni dimenticate: un protocol mapper che aggiunge un claim su cui un'applicazione fa un controllo di autorizzazione, un tema modificato, una required action personalizzata, un'estensione SPI scritta anni prima da qualcuno che non lavora più in azienda. L'inventario iniziale del realm, con l'elenco esplicito di mapper, temi, required action ed estensioni, è il passo che determina se il progetto scivola o no.
Il calendario è dominato dal collaudo e dalla progressione del cutover, non dalla parte tecnica. Un piano tipico prevede una o due settimane di inventario e mappa dei concetti, un pilota di almeno due settimane su venti-cinquanta utenti reali di reparti diversi, poi lo spostamento di un'applicazione alla volta con tre giorni lavorativi di osservazione fra una e l'altra, e infine trenta-novanta giorni di Keycloak in sola lettura prima della dismissione.
In quel caso la migrazione è molto più semplice, perché Keycloak non è la sorgente autorevole delle identità: gli utenti vivono nella directory. Si sostituisce solo il livello di autenticazione e federazione, la directory resta dov'è e la questione delle credenziali locali quasi non si pone, dato che gli utenti si autenticano a monte. È lo scenario in cui il valore della migrazione — rimuovere il presidio operativo di un servizio critico — arriva con il minor costo di progetto.
Perché il costo di Keycloak non è nella licenza ma nell'esercizio: infrastruttura e alta disponibilità, aggiornamenti frequenti con migrazioni major non banali, monitoraggio delle vulnerabilità, reperibilità su un servizio critico come il login e competenza specifica concentrata su poche persone difficili da sostituire. A questo si aggiungono due differenze architetturali: l'isolamento fra clienti è logico anziché crittografico, e l'amministratore del realm può resettare credenziali e secondo fattore degli utenti.
Vuoi vedere LoginMaster in azione?
Richiedi una demo personalizzata e scopri come gestire identità e accessi in modo sicuro e conforme.