Il Single Sign-On (SSO) è un meccanismo che permette a un utente di effettuare un’unica autenticazione valida per l’accesso a più risorse informatiche.
Dal punto di vista di Livebase, lo sviluppatore può abilitare le proprie Cloudlet per l’accesso tramite SSO, così che un determinato set di credenziali possa essere utilizzato sia per accedere a quelle Cloudlet sia ad altri servizi esterni. Allo stato attuale, questo è ottenibile attraverso l’interoperabilità con un sistema IAM (Identity and Access Management) denominato Keycloak.
Autenticazione HTTP Basic vs. Autenticazione token-based #
Il sistema di autenticazione utilizzato di default da Livebase è esclusivamente di tipo HTTP Basic. Questo sistema prevede un’unica richiesta al server di interesse, la quale comprende sia le credenziali dell’utente (tipicamente username e password) che l’indirizzo della risorsa desiderata.
Keycloak permette sia un’autenticazione di tipo HTTP Basic che di tipo token-based. In quest’ultimo caso, sono previste due richieste: la prima viene inviata a un Authentication Server, un server diverso da quello di interesse che ha lo scopo di fornire dei token che identificano un utente e ne certificano l’autorizzazione ad accedere a una particolare risorsa. Il token verrà incluso nella richiesta successiva inoltrata al server vero e proprio, insieme all’indirizzo della risorsa.
Un sistema token-based, rispetto all’autenticazione HTTP Basic, è più robusto in termini di sicurezza, in quanto permette tra le altre cose di definire una scadenza per il token ed eventualmente di estenderla (tramite refresh) o di accorciarla (tramite revoke), oppure di essere integrato con l’autenticazione a due fattori: due soluzioni che rendono inutili eventuali tentativi di intercettazione delle credenziali.
Concetti fondamentali #
Keycloak si basa su due concetti fondamentali: il realm e il client. Un realm è un gruppo isolato di utenti e delle credenziali a loro associate, e ne gestisce i processi di autenticazione. Un client è invece un’entità che delega a Keycloak il processo di autenticare i suoi utenti. Nel caso di Livebase, le Cloudlet possono essere registrate in qualità di client presso un certo realm, così che questo possa gestirne l’accesso per i relativi utenti.
Prerequisiti #
Livebase è attualmente compatibile fino alla versione 12.0.4 di Keycloak, che deve essere dispiegato su un server visibile alle Cloudlet del proprio account. Presso questo URL troverai una guida per predisporne uno.
Integrare Keycloak con Livebase #
Per integrare correttamente Keycloak con Livebase dovrai eseguire queste quattro operazioni:
- configurare il realm di interesse;
- definire all’interno del realm gli utenti delle Cloudlet Livebase che saranno abilitati all’accesso tramite SSO. Un utente di Cloudlet è automaticamente integrato con Keycloak se viene definito al suo interno con lo stesso username;
- definire un client per ogni Cloudlet che deve essere resa accessibile tramite SSO;
- esportare le configurazioni definite al punto precedente, e importarle nelle rispettive Cloudlet attraverso la Dashboard.
Configurazione del realm #
Connettiti all’Admin Console del tuo Keycloak: all’ URL <keycloakURL>/auth/admin
troverai la seguente schermata.
La schermata mostra le informazioni di uno dei realm che sono stati definiti all’interno del server Keycloak. Per scegliere il realm di interesse, passa il mouse sul menu a tendina vicino al nome di quello attuale per far apparire una lista di quelli disponibili, quindi fai clic su uno di essi. In alternativa, puoi crearne uno nuovo facendo clic sul pulsante Add Realm
, che farà comparire questa schermata.
Inserisci un nome per il nuovo realm e conferma facendo clic su Create
: sarà automaticamente selezionato.
Definizione di un utente #
Seleziona la voce Users
dal menu laterale per far apparire la lista di tutti gli utenti gestiti dal realm. Fai dunque clic sul pulsante Add User
in alto a destra.
Nella successiva schermata, inserisci nell’omonimo campo lo username di un utente registrato presso una delle Cloudlet che hai definito in Livebase: questo passaggio è condizione necessaria e sufficiente a permettere a Keycloak di gestire la sua autenticazione al posto di Livebase.
Puoi anche definire una o più azioni che l’utente dovrà eseguire al primo login, compilando il campo Required User Actions
:
Configure OTP
richiede che l’utente configuri un servizio che invierà OTP (One Time Password) ad ogni successivo login, in maniera da realizzare un’autenticazione a due fattori;Update Password
richiede che l’utente definisca una nuova password;Update Profile
richiede che l’utente aggiorni le informazioni del suo profilo;Verify Email
richiede che l’utente verifichi la propria email attraverso un link che sarà inviato presso di essa. In quest’ultimo caso, dovrà essere specificato il campoEmail
.
Conferma la creazione del nuovo utente facendo clic su Save
: adesso visualizzerai la schermata dei dettagli dell’utente appena creato.
Fai clic sulla tab Credentials
e definisci una password che l’utente dovrà utilizzare per accedere tramite Keycloak; digitala nuovamente nel campo sottostante per confermarne l’inserimento. Infine, se vuoi che l’utente definisca una nuova password al suo prossimo login, imposta il campo Temporary
a ON
, e conferma facendo clic sul pulsante Reset password
.
Definizione di un client #
Seleziona la voce Clients
dal menu laterale per far apparire la lista di tutti i client attualmente presenti nel realm. Fai dunque clic sul pulsante Create
in alto a destra.
Assegna un id al nuovo client e fai clic su Save
. Verrà ora visualizzata una schermata che ti permetterà di configurarne i parametri.
Per collegare correttamente la cloudlet al meccanismo SSO di Keycloak, devi eseguire le seguenti operazioni:
- imposta il campo
Access Type
aconfidential
; - compila il campo
Valid Redirect URIs
con il pattern che specificherà tutti gli URI della Cloudlet a cui dovrà essere consentito l’accesso tramite SSO. Per consentire l’accesso a tutti, utilizza i patternhttps://<baseCloudletUrl>/*
ehttp://<baseCloudletUrl>/*
; - imposta il campo
Client Protocol
aopenid-connect
; - compila il campo
Web Origins
con il pattern che specificherà tutte le origini a cui il meccanismo CORS dovrà permettere di accedere alle risorse della Cloudlet. Per autorizzare tutte le origini, specifica il pattern*
.
Una volta effettuate tutte le configurazioni, dovrai generare un file JSON per poterle applicare alla Cloudlet: per fare questo seleziona la tab Installation
e fai clic su Download
, dopo aver selezionato il valore Keycloak OIDC JSON
dal dropdown Format Option
.
Configurazione lato Dashboard #
Accedi alla Dashboard, apri il menu contestuale della Cloudlet e seleziona la voce Configure...
. Accedi dunque alla scheda SSO
.
Spunta il flag Enable SSO Configuration
e copia il JSON generato nel paragrafo precedente all’interno del campo di testo SSO Keycloak Deployment
. Esso presenta i seguenti campi:
realm
: indica il nome del realm di riferimento;auth-server-url
: indica l’URL dell’Authentication Server di Keycloak;ssl-required
: specifica per quali richieste dirette all’Authentication Server sia necessaria la comunicazione tramite SSL (Secure Socket Layer), ovvero per mezzo del protocollo HTTPS. Il valore di default èexternal
, che obbliga all’utilizzo di SSL per tutte le richieste esterne;resource
: indica il nome del client che rappresenta la Cloudlet all’interno di Keycloak;credentials
: elenca le credenziali di accesso all’applicazione;confidential-port
: indica la porta utilizzata dall’Authentication Server per comunicare attraverso SSL.
Prima di poter effettivamente utilizzare il JSON, è necessario aggiungere manualmente i seguenti tre campi:
autodetect-bearer-only
impostato atrue
. In questo modo, se dovesse fallire il processo di autenticazione, la Cloudlet risponderà con un redirect al server SSO se è stata interrogata da un client, mentre con una risposta di tipoUnauthorized
se è stata interrogata da un web server;enable-cors
impostato atrue
. Questo abiliterà le richieste di preflight per il meccanismo CORS;cors-allowed-methods
: pattern che chiarisce quali metodi HTTP sono autorizzati. Indicando il pattern*
si intendono tutti.
Alla fine di tutti questi passaggi, avrai un JSON con questa struttura:
{
"realm": "<realmName>",
"auth-server-url": "https://<keycloakURL>/auth",
"ssl-required": "external",
"resource": "<clientName>",
"credentials": {
"secret": "..."
},
"confidential-port": 0,
"autodetect-bearer-only": true,
"enable-cors": true,
"cors-allowed-methods": "*"
}
Conferma l’importazione della configurazione Keycloak facendo clic su OK
.
Test della configurazione #
Avvia la Cloudlet, e accedi alla sua homepage facendo clic sul suo URL. Come mostrato nella seguente immagine, nell’angolo in alto a destra noterai la mancanza della consueta form di login e la presenza del solo pulsante:
Facendo clic sul pulsante, verrai reindirizzato alla pagina di login di Keycloak:
Inserisci username e password dell’utente della Cloudlet che hai precedentemente associato con Keycloak (ricorda che la password è quella definita in Keycloak), quindi fai clic sul pulsante Log In
. Se la configurazione è stata svolta in maniera corretta, verrai reindirizzato alla pagina iniziale della Cloudlet.