Tech Blog

Come configurare Liferay per l'autenticazione tramite FIDO2

Tutorial su come configurare Liferay per l'autenticazione tramite FIDO2 introducendo la Multi-Factor Authentication

Antonio Musarra
Software Architect
9 minuti di lettura
Liferay, MFA e FIDO2
Questo articolo è disponibile anche in English 🇬🇧

Al decimo Liferay Boot Camp 2022 è stato trattato il tema su ciò che Liferay offre in termini di sicurezza e come realizzare le proprie soluzioni sfruttando il framework che Liferay mette a nostra disposizione.

Restando quindi in tema di sicurezza, in questo articolo affronteremo come abilitare la Multi-Factor Authentication (MFA) configurando in particolare l'uso di FIDO2 (Fast Identity Online 2) con l'obiettivo di poter accedere al portale tramite il proprio dispositivo (token hardware).

Nell'ordine vedremo:

  1. Cos'è FIDO2
  2. Le due fasi di WebAuthn
  3. Quali sono i requisiti per usare FIDO2
  4. Configurazione Multi-Factor Authentication per FIDO2
  5. Procedura di registrazione dell'authenticator
  6. Test di autenticazione con FIDO2

Leggendo questo articolo fino alla fine, dovreste poi essere in grado di aggiungere senza difficoltà, l'ulteriore fattore di autenticazione al normale processo di login tramite username e password.

Come di consueto lascerò il bonus di fine articolo, ovvero, il riferimento GitHub del progetto che consentirà a voi di ricreare lo scenario che andremo a descrivere. Troverete inoltre un breve filmato che mostra tutte le attività che sono state eseguite sul portale Liferay.

1. Cos'è FIDO2: WebAuthn & CTAP

FIDO2 è uno standard aperto (lanciato da FIDO Alliance e W3C) il cui obiettivo è quello di offrire un metodo di autenticazione senza password (o password-less) per il login sicuro nell'ambito dell'autenticazione web, utilizzando hardware verificato per l'identificazione degli utenti.

Con FIDO2 l'autenticazione avviene tramite un dispositivo attendibile, che in termini tecnici è denominato autenticatore. La connessione tra l'autenticatore e il browser può essere stabilita in diversi modi, come per esempio: Bluetooth, USB o NFC. Questi dispositivi possono essere di vario tipo e in genere:

FIDO2 combina la specifica W3C Web Authentication (WebAuthn) e i protocolli Client to Authenticator (CTAP) della FIDO Alliance.

Il protocollo CTAP risiede al livello dell'applicazione ed è responsabile della comunicazione sicura tra il dispositivo hardware verificato (o autenticatore) e il client/piattaforma (solitamente il browser) nonchè garantire la trasparenza rispetto al metodo di connessione che può essere USB, NFC (Near-Field Communication) o Bluetooth.

Il protocollo WebAuthn, invece, rende possibile l'autenticazione definendo il processo con cui le applicazioni web possono integrare la crittografia a chiave pubblica/privata (o asimmetrica) in un browser. Ciò si verifica quando comunicano tramite protocollo CTAP con l'autenticatore (modulo TPM o chiavetta USB).

Questa API permette ai Relying Parties (o Service Providers) di registrare e autenticare gli utenti attraverso un processo di crittografia asimmetrica, quest'ultima molto sicura, anziché attraverso un classico processo di autenticazione tramite username e password.

Lo standard FIDO2 è attualmente supportato da Windows 10, Android e dai web browsers Google Chrome, Mozilla Firefox, Microsoft Edge e Apple Safari.

Potremmo quindi riassumere le principali caratteristiche di FIDO2 in:

  1. Autenticazione con chiavi hardware esterne o integrate (vedi Apple launches web authentication using FIDO standard with Touch ID or Face ID biometrics in Safari)
  2. Autenticazione a due fattori
  3. Crittografia a chiave pubblica/privata asimmetrica;
  4. Autenticatore archiviato localmente

Lascio a voi gli approfondimenti sull'argomento, partendo dalla lettura del documento How FIDO Works pubblicato sul portale della FIDO Alliance.

2. Le due fasi di WebAuthn

Il protocollo WebAuthn prevede essenzialmente due fasi, che sono:

  1. Il flusso di registrazione delle credenziali
  2. Il flusso di autenticazione delle credenziali

In un flusso di registrazione utente basato su password, all'utente viene presentato un modulo che richiede una username e una password, quest'ultima è poi inviata al server per l'archiviazione.

In WebAuthn, un server deve fornire dati che associano un utente a una credenziale (una coppia di chiavi privata-pubblica); questi dati includono identificatori per l'utente e l'organizzazione (noto anche come Relying Party). Il sito Web utilizzerà quindi l'API di WebAuthn per richiedere all'utente di creare una nuova coppia di chiavi. È importante sapere che abbiamo bisogno di una stringa generata casualmente dal server come sfida (o challenge) al fine di prevenire attacchi.

Il dialogo mostrato a seguire rende esattamente l'idea del flusso di registrazione delle credenziali WebAuthn descritto in precedenza.

Figura 1 - Flusso di registrazione delle credenziali WebAuthn (fonte https://webauthn.guide/)
Figura 1 - Flusso di registrazione delle credenziali WebAuthn (fonte https://webauthn.guide/)

Al termine della registrazione, l'utente potrà essere autenticato. Durante l'autenticazione sarà creata un'asserzione, che è la prova che l'utente è in possesso della chiave privata. Questa asserzione contiene una firma (o signature) creata utilizzando la chiave privata. Il server utilizza la chiave pubblica recuperata durante la registrazione per verificare questa firma.

Il dialogo mostrato a seguire rende esattamente l'idea del flusso di autenticazione delle credenziali WebAuthn descritto in precedenza.

Figura 2 - Flusso di autenticazione delle credenziali WebAuthn (fonte https://webauthn.guide/)
Figura 2 - Flusso di autenticazione delle credenziali WebAuthn (fonte https://webauthn.guide/)

Per approfondire l'argomento circa l'uso delle WebAuthn API di registrazione e autenticazione, consiglio di leggere WebAuthn: A better alternative for securing our sensitive information online.

Queste due fasi di registrazione e autenticazione le vedremo poi in maniera distinta dal punto di vista pratico proprio su Liferay.

3. Requisiti per usare FIDO2 con Liferay

Prima di procedere con l'attività di configurazione della Multi-Factor Authentication (MFA) tramite FIDO2, è necessario che abbiate la disponibilità di una Security Key o Token e quest'ultima sia certificata FIDO2 (vedi FIDO Certified Showcase).

Per il caso presentato in questo articolo, utilizzerò la Security Key (o Token) YubiKey 5 Series. Ho preferito optare per questo dispositivo hardware poiché offre il supporto multiprotocollo consentendo una forte sicurezza per ambienti legacy e moderni. Questa Security Key è inoltre consigliata da Liferay.

Le caratteristiche principali di questa serie di Security Key:

  • Multi-protocol support; FIDO2, U2F, Smart Card, OTP, OpenPGP 3
  • USB-A, USB-C, NFC, Lightning
  • IP68 rated, crush resistant, no batteries required, no moving parts

4. Configurazione Multi-Factor Authentication per FIDO2

Lo standard Fast IDentity Online 2 o FIDO2 consente l'uso di dati biometrici (cioè lettori di impronte digitali), dispositivi mobili o altre chiavi di sicurezza per l'autenticazione senza password. Gli amministratori devono solo abilitare FIDO2 per la propria istanza, quindi gli utenti possono registrarsi e utilizzare i loro dispositivi compatibili con FIDO2.

Attenzione! La Multi-Factor Authentication è disponibile solo su Liferay DXP, non è possibile quindi attivare l'MFA sulla Community Edition.

Prima di poter configurare FIDO2, è necessario abilitare la Multi-Factor Authentication. Lo stato predefinito è abilitato a livello di sistema ma disabilitato nell'istanza predefinita. In effetti, ciò significa che l'MFA è difatti disabilitato sulle installazioni Liferay DXP standard.

Figura 3 - Accesso alla configurazione della Multi-Factor Authentication a livello di sistema
Figura 3 - Accesso alla configurazione della Multi-Factor Authentication a livello di sistema
Figura 4 - A livello di sistema l'MFA è abilitata
Figura 4 - A livello di sistema l'MFA è abilitata

Quello che occorre fare adesso, è l'abilitazione dell'MFA per l'istanza di portale.

Quest'attività richiede solo due passaggi:

  1. Andare su Control Panel → Instance Settings → Security → Multi-Factor Authentication → Multi-Factor Authentication One-Time Password Configuration
  2. Selezionare la casella Enabled e fare clic sul pulsante Save

Le due figure a seguire mostrano i passaggi esatti da compiere. Subito dopo aver salvato la configurazione, dovreste veder apparire sulla spalla sinistra le altre possibili configurazioni per MFA, di cui una è quella di FIDO2 (vedi figura 7).

Figura 5 - Accesso per l'abilitazione della MFA a livello di configurazione d'istanza
Figura 5 - Accesso per l'abilitazione della MFA a livello di configurazione d'istanza

Dal momento in cui è attiva l'MFA, dal prossimo accesso sarà necessario specificare il codice OTP (One-Time Password) inviato per email, per questo motivo è importante configurare correttamente il server SMTP d'invio email.

Figura 6 - Abilitazione dell'MFA
Figura 6 - Abilitazione dell'MFA

Una volta attivata la Multi-Factor Authentication, è possibile abilitare e configurare l'uso di FIDO2. Per compiere quest'operazione è sufficiente procedere nel seguente modo:

  1. Andare su Control Panel → Instance Settings → Security → Multi-Factor Authentication. Assicurarsi di aver abilitato l'autenticazione a più fattori prima di configurare FIDO2 (vedi step precedente)
  2. Fare clic su Fast IDentity Online 2 Configuration nella barra di navigazione a sinistra
  3. Fare clic sulla casella di controllo Enabled per abilitare FIDO2
Figura 7 - Accesso alla configurazione di FIDO2 o Fast IDentity Online 2
Figura 7 - Accesso alla configurazione di FIDO2 o Fast IDentity Online 2

Lasciando la configurazione con i valori di default, questa può andar bene per iniziare a fare i test sul proprio ambiente locale.

È possibile agire sulle seguenti impostazioni:

  1. Order: imposta la priorità per il controllo MFA via FIDO2. Maggiore è il numero, maggiore è la priorità. La priorità predefinita è impostata in modo che FIDO2 diventi il controllore di priorità più alta se abilitato.
  2. Relying Party Name: un nome arbitrario per il sito Web o installazione.
  3. Allowed Credentials Per User: ogni utente può avere il numero impostato di dispositivi FIDO2.
  4. Relying Party ID: l'identificatore di Relying Party di WebAuthn. In genere è impostato con il nome di dominio del portale.
  5. Origins: le risposte dell'autenticatore vengono confrontate con questo URL di origine, che dovrebbe puntare alla propria installazione o comunque al virtual host della specifica istanza Liferay. È possibile aggiungere diversi valori per questa configurazione. Per motivi di sicurezza è sempre consigliato l'uso di https per crittografare la connessione.
  6. Allow Origin Port: selezionare questa casella per includere qualsiasi numero di porta nella regola di corrispondenza dell'origine. Impostare quest'opzione potrebbe essere utile in ambiente di sviluppo/collaudo.
  7. Allow Origin Subdomain: selezionare questa casella per includere qualsiasi sottodominio di origine nella regola di corrispondenza dell'origine.

Ipotizzando un caso reale, potremmo pensare d'impostare i seguenti valori di configurazione:

  1. Relying Party Name: SMC Tech Blog
  2. Relying Party ID: techblog.portal.local
  3. Origins: https://techblog.portal.local

La figura a seguire mostra la configurazione di FIDO2 con applicati i valori indicati in precedenza.

Figura 8 - Configurazione completa del modulo MFA di FIDO2
Figura 8 - Configurazione completa del modulo MFA di FIDO2

La stessa configurazione è possibile utilizzando il file di configurazione OSGi (quelli che per intenderci sono posizionati in $LIFERAY_HOME/osgi/configs). A seguire il contenuto del file com.liferay.multi.factor.authentication.fido2.web.internal.configuration.MFAFIDO2Configuration.scoped~3da064c9-3224-405d-8dc6-677104a70170.config che riporta la medesima configurazione mostrata dalla Figura 8.


allowOriginPort=B"false"
allowOriginSubdomain=B"false"
allowedCredentialsPerUser=I"1"
companyId=L"34701"
enabled=B"true"
origins=[ \
  "https://techblog.portal.local", \
  ]
relyingPartyId="techblog.portal.local"
relyingPartyName="SMC\ Tech\ Blog"
service.ranking=I"200"
Source 1 - File di configurazione OSGi relativo al modulo FIDO2

4. Procedura di registrazione dell'authenticator

Una volta abilitato FIDO2, gli utenti potranno aggiungere gli autenticatori direttamente dalle impostazioni dell'account dell'utente seguendo i passi indicati a seguire. Questo processo implementa il flusso di registrazione delle credenziali WebAuthn descritto in precedenza e mostrato in Figura 1.

  1. Fare clic sull'immagine del profilo
  2. Fare clic su Account Settings
  3. Viene visualizzata una nuova scheda in alto, denominata Multi-Factor Authentication, quindi, cliccare su di essa
  4. Assicurarsi che il proprio dispositivo conforme a FIDO2 sia connesso al proprio PC (per esempio via USB)
  5. Per registrare l'autenticatore, fare clic sul grande pulsante blu con l'etichetta Register a FIDO2 Authenticator
Figura 9 - Accesso alle impostazioni dell'account
Figura 9 - Accesso alle impostazioni dell'account

Quando si procede con la registrazione, è possibile il vostro browser mostri degli avvisi di sicurezza, come per esempio quelli mostrati a seguire che fanno riferimento a Firefox (versione 100.0.1 64bit). Altri browser potrebbero avere comportamenti diversi ma con lo stesso intento.

Figura 10 - Avviso del browser che l'applicazione sta richiedendo l'uso della vostra Security Key
Figura 10 - Avviso del browser che l'applicazione sta richiedendo l'uso della vostra Security Key
Figura 11 - Il browser invita a usare la Security Key per connettersi e autorizzare il portale
Figura 11 - Il browser invita a usare la Security Key per connettersi e autorizzare il portale

Una volta che la procedura di registrazione è stata ultimata con successo, dovreste vedere la vostra Security Key o Authenticator (per restare nei termini di FIDO2) registrata sul proprio account. Da questo momento in poi sarà possibile accedere al portale Liferay utilizzando la vostra Security Key come altro fattore di autenticazione.

Figura 12 - Security Key FIDO2 registrata sull'account dell'utente
Figura 12 - Security Key FIDO2 registrata sull'account dell'utente

Al termine della registrazione, le informazioni sono memorizzate sulla tabella mfafido2credentialentry di Liferay la cui struttura è mostrata a seguire. Tra le informazioni memorizzate è disponibile la chiave pubblica (in credentialkey).

lportal=# \d mfafido2credentialentry;
 mvccversion               | bigint                      |           | not null | 0
 mfafido2credentialentryid | bigint                      |           | not null |
 companyid                 | bigint                      |           |          |
 userid                    | bigint                      |           |          |
 username                  | character varying(75)       |           |          |
 createdate                | timestamp without time zone |           |          |
 modifieddate              | timestamp without time zone |           |          |
 credentialkey             | text                        |           |          |
 credentialkeyhash         | bigint                      |           |          |
 credentialtype            | integer                     |           |          |
 failedattempts            | integer                     |           |          |
 publickeycose             | character varying(128)      |           |          |
 signaturecount            | bigint                      |           |          |
Console 1 - Struttura della tabella mfafido2credentialentry

A seguire sono invece mostrati i dati contenuti all'interno della tabella mfafido2credentialentry.

lportal=# select * from mfafido2credentialentry;
mvccversion               | 8
mfafido2credentialentryid | 44754
companyid                 | 34701
userid                    | 44725
username                  | Antonio Musarra
createdate                | 2022-05-19 16:37:18.277
modifieddate              | 2022-05-19 23:53:10.883
credentialkey             | bzLIWZQhw1fEuKlRrdNAoJxYJR/g1Z+BgRhbywlMp8hA9rqIJSyUPq9kS2xxLj3Ps1wSsr4nrNgjVirGz4oCOA==
credentialkeyhash         | 236161127
credentialtype            | 0
failedattempts            | 0
publickeycose             | pQECAyYgASFYIN4KLjv3JhB4SMwAB8e43wDEMDXJvM7Ag8Z7xxqFlDRrIlggO8V4jr/1JZcsj5kybUQfzDTG0vJvZi2yi4M6XTsfMXI=
signaturecount            | 27
Console 2 - Contenuto della tabella mfafido2credentialentry che contiene i dati di registrazione della Security Key

In alcuni casi potrebbe capitare che il processo di registrazione non vada a buon fine e i più comuni motivi sono in genere:

  1. La versione del browser non supporta il protocollo WebAuthn. In questo caso consiglio l'aggiornamento del browser e consultare il documento FIDO2: Web Authentication (WebAuthn) e in particolare il capitolo Support for FIDO2: WebAuthn and CTAP - Browsers and Platforms
  2. Il dispositivo hardware (o authenticator) non è supportato dal vostro sistema operativo. Fare riferimento alla documentazione tecnica della Security Key
  3. Il dispositivo hardware non è conforme alle specifiche FIDO2. Fare riferimento alla documentazione tecnica della Security Key

La figura a seguire mostra il messaggio visualizzato in caso di errori nel processo di registrazione. La consultazione del log file del portale dovrebbe aiutare a capire la causa dell'errore in fase di registrazione.

Figura 13 - Errore in caso di registrazione non andata a buon fine
Figura 13 - Errore in caso di registrazione non andata a buon fine

5. Test di autenticazione con FIDO2

Ora che l'autenticatore è registrato nel proprio profilo, è possibile usarlo per accedere al portale Liferay.

Dopo aver inserito correttamente la propria username e password (tramite il widget di login standard), sarà mostrato il pulsante che offre la possibilità di verificare l'identità utilizzando l'autenticatore FIDO2 registrato (vedi figura a seguire).

In caso di problemi con l'accesso via FIDO2, è comunque possibile richiedere l'OTP di accesso via email.

Figura 14 - Verifica dell'identità tramite l'autenticatore FIDO2 registrato in precedenza
Figura 14 - Verifica dell'identità tramite l'autenticatore FIDO2 registrato in precedenza

6. Il bonus

Immagino che avere la disponibilità di un Docker Compose con tutti i servizi configurati che implementi lo scenario descritto, sia un bel bonus; siete della stessa idea?

Il progetto how-to-configure-fido2 pubblicato sul repository GitHub di SMC, contiene il Docker Compose e tutte le configurazioni che consentono di implementare lo scenario descritto nel corso di questo articolo.

A seguire sono riportati i servizi che compongono lo stack.

  1. Liferay DXP 7.4
  2. PostgreSQL (database per Liferay)
  3. Server SMTP (servizio per l'invio email)
  4. Traefik (Load Balancer)

Il servizio del portale Liferay è configurato per essere accessibile attraverso Traefik su porta https e sull'FQDN techblog.portal.local.

Gli step necessari per eseguire l'intero stack sono:

  1. Verifica della versione di Docker (Docker Engine 20.10.x, Docker Compose 1.29.x)
  2. Clone del repository how-to-configure-fido2
  3. Aggiornamento del file di hosts (della macchina host) con le entry per Liferay
  4. Avvio dello stack via Docker Compose

Riguardo la versione di Docker, per questo articolo è stato fatto uso di Docker Desktop per macOS versione 4.8.0 (che include Docker Engine 20.10.14 e Docker Compose 1.29.2).

Ho comunque eseguito un test usando Docker su Linux. Stessa versione di Docker usata su macOS ma con una versione di Docker Compose inferiore, ovvero, la 1.28.6. Non ho riscontrato alcun problema, lo stack dei servizi è stato correttamente tirato su.

Non ho potuto fare test su Windows; lascio a qualcuno di voi la conduzione di questa prova.

# Step 1 - Check Docker version
$ docker version
$ docker-compose version

# Step 2 - Clone the project git repository
$ git clone https://github.com/smclab/how-to-configure-fido2.git

# Step 3 - Update the /etc/hosts with this content
127.0.0.1   techblog.portal.local

# Step 4 - Start the Docker Compose stack services (in fg o bg)
$ docker-compose up
$ docker-compose up -d
Console 3 - Avvio dello stack dei servizi via Docker Compose

A seguire è invece disponibile il video che mostra tutto il setup del portale Liferay che abbiamo visto nel corso dell'articolo.

7. Conclusioni

Durante lo speech Liferay Authentication: How to create a Token-based SSO system, abbiamo avuto modo di vedere le possibilità che Liferay offre circa i meccanismi di autenticazione e le modalità di estensione che consentono di sviluppare le proprie soluzioni.

Attenzione! È possibile scaricare tutto il materiale del Liferay Boot Camp 2022 seguendo il link https://bit.ly/download-materials-lrbc22

Potete scaricare tutto il materiale del Liferay Boot Camp 2022 da https://bit.ly/download-materials-lrbc22
Potete scaricare tutto il materiale del Liferay Boot Camp 2022 da https://bit.ly/download-materials-lrbc22

Nel corso di questo articolo abbiamo invece visto nel dettaglio come configurare e utilizzare la Multi-factor Authentication, meccanismo di autenticazione supportato OOTB (Out Of The Box) dall'edizione DXP. L'utilizzo del Security Tocken (hardware) è un secondo fattore di autenticazione, ovvero, dopo che l'utente ha inserito correttamente la coppia username e password. Attraverso opportune estensioni da sviluppare, sarebbe possibile rendere l'accesso al portale Liferay completamente password-less e questo potrebbe essere argomento di un altro articolo.

scritto da
Antonio Musarra
Software Architect
In SMC ricopre il ruolo di Senior Software Architect e si occupa in genere di consulenze specialistiche su progetti che riguardano la piattaforma Liferay, curando in particolare gli aspetti d'integrazione con altri sistemi. Crede nella condivisione della conoscenza come mezzo per la crescita personale e per questo motivo, circa otto anni fa, ha creato un suo blog personale: Antonio Musarra's Blog www.dontesta.it. Con la voglia ancora di condividere, ha pubblicato su Amazon nel 2015 il suo primo eBook, Sviluppo Liferay con Maven, arrivando alla sua ultima pubblicazione del 2018 con l'eBook Liferay Portal Security Audit.

Potrebbero interessarti anche…