Cos’è il flusso implicito (implicit flow)?
Il flusso implicito (implicit flow) di OAuth 2.0 è un metodo di autenticazione che consente alle applicazioni client-only (come le SPA e le app native) di ricevere token direttamente attraverso frammenti URL dal server di autorizzazione senza fornire un client secret.
Il flusso implicito (implicit flow) è progettato per applicazioni client-only, poiché funzionano completamente nel browser o sul dispositivo dell’utente e non possono memorizzare in modo sicuro i client secret.
Il flusso implicito (implicit flow) è stato ufficialmente deprecato in OAuth 2.1 per motivi di sicurezza (che verranno menzionati di seguito). Le applicazioni client-only dovrebbero ora utilizzare il Flusso del codice di autorizzazione (Authorization code flow) con l’estensione Proof Key for Code Exchange (PKCE) .
Come funziona il flusso implicito (implicit flow)?
I passaggi principali del flusso implicito (implicit flow) sono i seguenti:
Nota:
-
Il client deve solo fornire un
client_id
nella richiesta di autorizzazione, senza richiedere unclient_secret
.
Questo perché questi client non possono memorizzare in modo sicuro i secret, quindi questo flusso non richiede un client secret. -
Il parametro
response_type
è impostato sutoken
, istruendo il server di autorizzazione a restituire direttamente l’access token invece di un codice di autorizzazione.
In OIDC ( OpenID Connect (OIDC) ), ilresponse_type
èid_token
oid_token token
, e il servizio di autenticazione restituirà i token corrispondenti in base ai diversi tipi di risposta. -
Il token viene restituito direttamente nel frammento URL. Ciò significa che il token è esposto nell’URL e può essere facilmente accessibile da altre applicazioni o script.
Il flusso implicito (implicit flow) è sicuro?
No, il flusso implicito (implicit flow) in OAuth 2.0 è generalmente considerato meno sicuro rispetto ad altri flussi come il flusso del codice di autorizzazione (authorization code flow).
Non è raccomandato per la maggior parte dei casi d’uso a causa di diverse vulnerabilità:
-
Esposizione del token nell’URL
- Gli access token appaiono direttamente nell’URL del browser (dopo il simbolo #)
- Questi token possono essere:
- Salvati nella cronologia del browser
- Trapassati attraverso gli header referrer
- Catturati da codice JavaScript malevolo sulla stessa pagina
-
Nessuna autenticazione del client
- L’applicazione client non deve dimostrare la propria identità
- Ciò significa che chiunque conosca il
client_id
può fingere di essere un client legittimo
-
Nessun refresh token
- Questo flusso non supporta i refresh token
- Gli utenti devono effettuare nuovamente il login quando gli access token scadono
- Per evitare login frequenti, gli utenti potrebbero memorizzare i token in modi non sicuri
-
Vulnerabile agli attacchi XSS
- Tutti i token sono gestiti nel browser
- Se il sito web subisce un attacco XSS (Cross-Site Scripting)
- Il codice JavaScript degli attaccanti può facilmente rubare questi token
A causa di queste preoccupazioni di sicurezza, il flusso implicito (implicit flow) è stato deprecato in OAuth 2.1 . Le applicazioni client-only dovrebbero ora utilizzare il Flusso del codice di autorizzazione (Authorization code flow) con l’estensione Proof Key for Code Exchange (PKCE) .
Puoi consultare Cos’è PKCE: dai concetti di base alla comprensione approfondita per imparare come PKCE protegge il flusso del codice di autorizzazione per le applicazioni client-only.