Che cos’è una concessione OAuth 2.0 (OAuth 2.0 grant)?
Una concessione OAuth 2.0 (OAuth 2.0 grant) è un processo di autorizzazione che consente a un Client di richiedere un Token di accesso (Access token) da un Server di autorizzazione . Potresti anche sentire altri termini relativi a questo concetto, quindi chiarifichiamoli prima di approfondire:
- Concessione OAuth 2.0 (OAuth 2.0 grant): Conosciuta anche come “tipo di concessione OAuth 2.0”, “flusso OAuth 2.0” o “concessione di autorizzazione OAuth 2.0”. Nella maggior parte dei contesti, questi termini si riferiscono allo stesso concetto.
- Server di autorizzazione : Il server che emette access token al client. In OpenID Connect (OIDC), l’authorization server è lo stesso del OpenID Provider (OP) .
- Richiesta di autorizzazione (Authorization request) : La richiesta effettuata dal client all’authorization server per ottenere un access token. In OpenID Connect (OIDC), è anche indicata come Richiesta di autenticazione (Authentication request) .
Per chiarezza, utilizzeremo i termini iniziali elencati sopra in modo coerente in tutto questo articolo.
Il processo ad alto livello di una concessione OAuth 2.0 (OAuth 2.0 grant) è piuttosto semplice:
Dopo che il client riceve l’access token, può usarlo per accedere a risorse protette (ad esempio, API) per conto di un utente o di se stesso.
Nota che, a seconda della concessione specifica, il client e l’authorization server possono scambiarsi ulteriori informazioni e coinvolgere più passaggi nel processo. Ad esempio, la concessione del codice di autorizzazione coinvolge l’autenticazione e l’autorizzazione dell’utente, la generazione del codice e lo scambio di token.
Diverse concessioni OAuth 2.0 (OAuth 2.0 grants)
La specifica di base di OAuth 2.0 definisce quattro concessioni che i client possono utilizzare per ottenere access token:
- Concessione del codice di autorizzazione : La concessione più sicura e raccomandata per la maggior parte delle applicazioni. È obbligatorio utilizzare Proof Key for Code Exchange (PKCE) per tutti i client in OAuth 2.1 .
- Concessione implicita : Una concessione semplificata che è deprecata in OAuth 2.1 a causa di problemi di sicurezza.
- Concessione delle credenziali della password del proprietario della risorsa (ROPC) : Una concessione in cui le credenziali dell’utente vengono scambiate direttamente per un access token. Non è raccomandata per la maggior parte delle applicazioni a causa dei rischi per la sicurezza.
- Concessione delle credenziali del client : Una concessione utilizzata da Client riservati per ottenere un access token senza il coinvolgimento dell’utente.
Man mano che l’industria evolve, le concessioni implicite e ROPC vengono deprecate a favore di flussi più sicuri e standardizzati. Per le nuove applicazioni, le scelte sono semplici:
- Per l’autenticazione e l’autorizzazione dell’utente, utilizzare la concessione del codice di autorizzazione con PKCE.
- Per la comunicazione Comunicazione machine-to-machine , utilizzare la concessione delle credenziali del client.
Altre concessioni OAuth 2.0 (OAuth 2.0 grants)
Oltre alle quattro concessioni di base, ci sono altre estensioni che definiscono nuove concessioni per casi d’uso specifici. Ad esempio:
- La concessione di autorizzazione del dispositivo è una concessione progettata per dispositivi con capacità di input limitate, come smart TV e dispositivi IoT.
- Il flusso ibrido è una concessione OpenID Connect che combina la concessione del codice di autorizzazione con la concessione implicita.
Concessioni in OpenID Connect (OIDC)
In OpenID Connect (OIDC) , il concetto di concessioni è esteso per includere ID token che rappresentano informazioni sull’identità dell’utente oltre agli access token. OIDC estende due concessioni OAuth 2.0 (codice di autorizzazione e implicita) per includere ID token e introduce una nuova concessione chiamata flusso ibrido che combina entrambi.
Come OAuth 2.0, è consigliato utilizzare solo la concessione del codice di autorizzazione con PKCE in OIDC per l’autenticazione e l’autorizzazione dell’utente.
Nel frattempo, poiché OIDC è costruito sopra OAuth 2.0, altre concessioni come la concessione delle credenziali del client possono ancora essere utilizzate sullo stesso authorization server, purché il server le supporti.