Cos’è il flusso delle credenziali del client (client credentials flow)?
Il flusso delle credenziali del client (Grant) è un tipo di Concessione OAuth 2.0 (OAuth 2.0 grant) che consente ai client riservati di ottenere access token per accedere a risorse protette. Di solito, questo flusso è utilizzato per la comunicazione Comunicazione machine-to-machine dove il client è un server o un servizio.
[!Note] Il flusso delle credenziali del client non è adatto per l’autorizzazione dell’utente finale. Per l’autorizzazione dell’utente finale, dovresti usare Richiesta di autenticazione (Authentication request) o Richiesta di autorizzazione (Authorization request) .
Come funziona il flusso delle credenziali del client (client credentials flow)?
Il flusso delle credenziali del client è un semplice processo in due fasi:
- Richiesta di token: Il client invia una Richiesta di token con le sue credenziali (client ID e client secret) e gli scope richiesti.
- Risposta del token: Il Server di autorizzazione valida le credenziali del client e rilascia un access token se il client è autorizzato.
Ecco un diagramma di sequenza semplificato del flusso delle credenziali del client:
Ecco un esempio non normativo di una richiesta di token nel flusso delle credenziali del client:
POST /token HTTP/1.1
Host: your-authorization-server.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=read write
Il server di autorizzazione validerà le credenziali del client e rilascerà un access token se il client è autorizzato. Una volta che il client riceve l’access token, può usarlo per accedere a risorse protette (ad esempio, un’API) per conto di se stesso. Ecco un esempio di come un client utilizza l’access token per accedere a un’API:
Nota che il Server delle risorse dovrebbe validare l’access token e applicare le politiche di Controllo degli accessi per garantire che il client abbia le autorizzazioni necessarie per accedere alla risorsa.
Parametri chiave in una richiesta di token nel flusso delle credenziali del client
A differenza di altri flussi OAuth 2.0, il flusso delle credenziali del client ha una semplice Richiesta di token con i seguenti parametri chiave:
grant_type
: Il tipo di concessione dovrebbe essere impostato suclient_credentials
per indicare il flusso delle credenziali del client.client_id
: L’identificatore del client emesso dal server di autorizzazione.client_secret
: Il client secret emesso dal server di autorizzazione.scope
: Gli scope richiesti (autorizzazioni) per l’access 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.
Considerazioni sulla sicurezza
Client riservati
Il flusso delle credenziali del client è adatto per Client riservati (client riservati) che possono memorizzare in modo sicuro il client secret. Se il client è un client pubblico (ad esempio, un’applicazione a pagina singola), non dovrebbe utilizzare il flusso delle credenziali del client perché il client secret può essere esposto.
Scadenza del token
Sebbene l’access token ottenuto nel flusso delle credenziali del client possa avere un lungo tempo di scadenza, è consigliato utilizzare access token di breve durata (ad esempio, 1 ora) per ridurre il rischio di accesso non autorizzato se il token viene compromesso.
Rotazione del client secret
Per migliorare la sicurezza, è consigliato ruotare periodicamente il client secret. Il server di autorizzazione dovrebbe supportare la rotazione del client secret senza influire sulla capacità del client di ottenere access token. Ad esempio, il server di autorizzazione dovrebbe supportare più client secret per la compatibilità retroattiva durante il processo di rotazione.