Con un vero server OAuth 2.0 + OpenID Connect

OAuth, finalmente spiegato semplice.

Guarda i messaggi viaggiare tra te, l'app e il server. Clicca, accedi, rompi le cose di proposito. Niente gergo senza spiegazione: passa il mouse sui termini sottolineati.

📸
🙅
🏛️
🔑
🗝️

1/4Un'app vuole vedere le tue foto.

Il problema

Perché non dare semplicemente la password all'app?

Sarebbe come dare le chiavi di casa al ragazzo che porta la pizza. OAuth gli dà invece un codice del portone valido 10 minuti.

🔓 Dare la password

  • L'app conosce la tua password
  • Può fare TUTTO col tuo account
  • Per toglierle l'accesso devi cambiare password
  • Se l'app viene bucata, la tua password è fuori

🛡️ Con OAuth

  • L'app non vede mai la password
  • Riceve solo i permessi che scegli tu (scope)
  • Puoi revocare l'accesso con un clic
  • Il token scade da solo dopo poco
I personaggi

Quattro attori, sempre gli stessi

🧑
Tu
Utente · Resource Owner

Il proprietario dei dati. Decide cosa concedere.

📱
App Foto
Client

Chi vuole accedere ai tuoi dati per offrirti un servizio.

🏛️
LabID
Authorization Server

Il guardiano: verifica chi sei e rilascia i token.

🗄️
API Foto
Resource Server

La cassaforte dei dati: apre solo con un token valido.

I flussi

Scegli un'avventura

Ogni flusso è un modo diverso di ottenere un token, pensato per un tipo di app diverso. Tutti girano su un vero server.

Mini-quiz

Quale flusso fa per me?

Tre domande al massimo. Promesso.

C'è una persona che usa l'app e deve dare il permesso?

Glossario

Le parole difficili, in parole facili

🔐 OAuth

Un protocollo per dare a un'app un accesso limitato ai tuoi dati, senza darle la tua password.

🔑 access token

La chiave temporanea che l'app mostra all'API. Dura poco e apre solo ciò che hai concesso.

🔄 refresh token

Un buono per ottenere nuovi access token senza rifare il login. Va custodito con cura.

🪪 id_token

Un JWT di OpenID Connect che dice CHI sei. Serve per il login, non per chiamare le API.

🎚️ scope

Un permesso specifico (es. photo = leggere le foto). L'app li chiede, tu li concedi.

🏷️ client_id

Il nome pubblico dell'app presso il server di autorizzazione.

🤫 client_secret

La password dell'app. Solo le app con un server possono tenerla davvero segreta.

↩️ redirect_uri

L'indirizzo dove il server rimanda il browser dopo il consenso. Deve essere registrato in anticipo.

🧾 state

Un valore casuale che l'app manda e poi ricontrolla al ritorno, per difendersi dagli attacchi CSRF.

🛡️ PKCE

Proof Key for Code Exchange: un segreto usa-e-getta che impedisce a chi ruba il code di usarlo.

🎟️ code_verifier

Il segreto casuale di PKCE. Resta nell'app fino allo scambio del code.

🧬 code_challenge

L'impronta SHA-256 del code_verifier, inviata all'inizio del flusso.

🎲 nonce

Un numero usato una volta: lega l'id_token alla tua specifica richiesta di login.

📜 JWT

JSON Web Token: tre pezzi base64 separati da punti (header.payload.firma). Leggibile da tutti, ma non falsificabile.

🎫 Bearer

"Al portatore": chi possiede il token può usarlo. Per questo va protetto come denaro contante.

📨 authorization code

Un codice monouso e di breve durata che l'app scambia con i token.

🏛️ Authorization Server

Chi verifica la tua identità e rilascia i token (qui: LabID; nel mondo reale Google, Entra ID, Keycloak…).

🗄️ Resource Server

L'API che custodisce i dati e accetta solo token validi.

OAuth Lab · simulatore didattico. Il server LabID parla OAuth 2.0 vero (RFC 6749, 7636, 8628) e OpenID Connect, e gira in un Service Worker nel tuo browser: apri DevTools → Network per vedere ogni richiesta. Ispirato all'OAuth 2.0 Playground.