OAuth OIDC — Cheat Sheet

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.

Concetti chiave

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.

Domande tipiche e risposte pronte

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.

Insidie e errori comuni

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.

Snippet e comandi

// 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"
}

Da ripassare

[ ] 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.

Jarvis Interviews
Jarvis