Cos’è il flusso ibrido (hybrid flow)?
Il flusso ibrido (hybrid flow) è un processo di autenticazione che combina le caratteristiche del Flusso del codice di autorizzazione (Authorization code flow) e del Flusso implicito (Implicit flow) . Vale la pena notare che il flusso ibrido non fa parte della specifica OAuth 2.0 , ma è un’estensione fornita da OpenID Connect (OIDC) .
Questo flusso è progettato per fornire un equilibrio tra sicurezza e usabilità per l’autenticazione degli utenti. Tuttavia, il flusso ibrido non è raccomandato per le nuove applicazioni a causa delle considerazioni sulla sicurezza associate al flusso implicito. Un’alternativa popolare al flusso ibrido è utilizzare il flusso del codice di autorizzazione (authorization code flow) con Proof Key for Code Exchange (PKCE) per una maggiore sicurezza.
Come funziona il flusso ibrido (hybrid flow)?
Ecco i passaggi principali del flusso ibrido:
-
Simile ad altri flussi OIDC, il flusso ibrido inizia con il Client che avvia una Richiesta di autenticazione (Authentication request) al OpenID Provider (OP) .
Nota: Il client dovrebbe includere il parametro
response_type
con la combinazione dicode
e almeno uno traid_token
otoken
, il che significa che ci sono tre possibili combinazioni:code id_token
: Il client si aspetta un codice di autorizzazione e un ID token.code token
: Il client si aspetta un codice di autorizzazione e un access token.code id_token token
: Il client si aspetta un codice di autorizzazione, un ID token e un access token.
Il requisito è autoesplicativo: il client si aspetta sia un codice di autorizzazione che uno o più token, che corrispondono rispettivamente al flusso del codice di autorizzazione (authorization code flow) e al flusso implicito (implicit flow).
-
L’utente si autentica sul OpenID Provider (OP) .
-
Il OpenID Provider (OP) reindirizza l’utente all’applicazione client con il codice di autorizzazione e i token richiesti.
-
L’applicazione client elabora i token e può utilizzarli per accedere a risorse protette per conto dell’utente; può anche utilizzare il codice di autorizzazione per ottenere token aggiuntivi tramite la Richiesta di token .
Ecco un diagramma di sequenza semplificato del flusso ibrido:
Ecco un esempio non normativo di una richiesta di autenticazione del flusso ibrido:
GET /authorize?response_type=code%20id_token
&client_id=YOUR_CLIENT_ID
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
&scope=openid%20profile%20email
&nonce=123456
&state=abc123 HTTP/1.1
Host: your-openid-provider.com
Parametri chiave in una richiesta di autenticazione del flusso ibrido
La richiesta di autenticazione del flusso ibrido include i seguenti parametri chiave:
response_type
: Il valore dovrebbe essere una combinazione dicode
e almeno uno traid_token
otoken
. Ad esempio,code id_token
ocode token
.client_id
: L’identificatore del client emesso dal OpenID Provider (OP) (authorization server).redirect_uri
: L’URI dove il server di autorizzazione invia l’utente dopo il processo di autenticazione.scope
: I scope (permessi) richiesti per i token.resource
: Il parametro opzionale che specifica il Indicatore di risorsa per le risorse richieste. Il server di autorizzazione deve supportare RFC 8707 per utilizzare questo parametro.
Per l’elenco completo dei parametri e le loro descrizioni, vedere Authentication using the Hybrid Flow .
Considerazioni sulla sicurezza
Il flusso ibrido include il flusso implicito, noto per le sue limitazioni di sicurezza. I token sono ancora trasmessi tramite il canale frontale (browser), il che può esporli a potenziali attacchi. Il flusso implicito sarà deprecato in OAuth 2.1 a causa di queste preoccupazioni.
Flusso del codice di autorizzazione (Authorization code flow) con Proof Key for Code Exchange (PKCE) è l’alternativa raccomandata al flusso ibrido. Fornisce un modo più sicuro per autenticare gli utenti senza esporre i token nel canale frontale.