Tag: oauth, oidc, authentication, authorization, jwt, security, identity
Livello: intermedio
TL;DR: OAuth 2.0 è un framework di autorizzazione delegata per l'accesso alle API tramite Access Token. OpenID Connect (OIDC) è un layer di identità costruito su OAuth 2.0 che fornisce l'autenticazione dell'utente tramite un ID Token in formato JWT.
L'Authorization Server gestisce l'autenticazione dell'utente e rilascia i token al Client.
Il Resource Server (le API) riceve l'Access Token e ne verifica la validità prima di servire la richiesta.
L'Access Token è spesso opaco per il Client; serve unicamente al Resource Server per autorizzare le operazioni.
L'ID Token è un JWT (JSON Web Token) firmato crittograficamente, decodificabile dal Client per leggere i dati dell'utente.
Authorization Code Flow: il flusso standard e più sicuro, divide il processo in fase di frontend (ottenimento del codice) e backend (scambio codice-token).
PKCE (Proof Key for Code Exchange): estensione di sicurezza obbligatoria per le Single Page Applications e mobile app, mitiga l'intercettazione del codice.
Client Credentials Flow: flusso M2M (machine-to-machine) senza coinvolgimento di un utente umano, usato dai servizi backend.
Lo scope openid è obbligatorio nella richiesta iniziale per attivare il flusso OIDC e ottenere l'ID Token.
L'endpoint /userinfo di OIDC restituisce ulteriori claim (dati) sull'utente autorizzato dall'Access Token.
Q: Qual è la differenza principale tra OAuth 2.0 e OpenID Connect?
R: OAuth 2.0 si occupa solo di autorizzazione e rilascia un access token per consumare API. OIDC aggiunge l'autenticazione fornendo un ID Token, che mi permette di sapere esattamente chi è l'utente loggato.
Q: Come proteggi un'applicazione React con OAuth 2.0?
R: Uso l'Authorization Code Flow con PKCE. Evito il vecchio Implicit Flow per non esporre i token nell'URL e, possibilmente, implemento un layer BFF (Backend-For-Frontend) per salvare i token in cookie HttpOnly.
Q: Cos'è un Refresh Token e come funziona?
R: È un token a lunga scadenza usato per richiedere un nuovo access token quando questo scade, senza costringere l'utente a reinserire le credenziali.
Inviare l'ID Token come Bearer token nell'header di autorizzazione verso le API (solo l'Access Token va usato a tale scopo).
Salvare token sensibili nel Local Storage del browser, esponendo l'applicazione ad attacchi XSS.
Non validare la firma crittografica (signature), l'emittente (iss) o la scadenza (exp) del JWT sul backend.
Utilizzare lo scope globale per ogni servizio invece di applicare il principio del privilegio minimo sugli Access Token.
// Esempio di Payload decodificato di un ID Token (OIDC)
{
"iss": "https://accounts.provider.com",
"sub": "1234567890",
"aud": "mio-client-id",
"exp": 1699999999,
"iat": 1699996399,
"email": "utente@example.com",
"name": "Mario Rossi"
}
[ ] Dettagli implementativi del flusso PKCE (generazione del code_verifier e code_challenge).
[ ] Pattern Backend-For-Frontend (BFF) per la gestione sicura dei cookie.
[ ] Rotazione e revoca dei Refresh Token.
Modifica direttamente o con Gemini Fai clic in un punto qualsiasi per digitare e modificare direttamente oppure seleziona il testo per chiedere a Gemini di apportare modifiche.
Ho generato il file richiesto applicando i parametri di stile, neutralità e formattazione delineati dal master prompt. I concetti essenziali di OAuth e OIDC sono stati riassunti in modo rapido e fruibile.