OAuth 2.0 RFC 6749: lo standard dell'autorizzazione delegata

OAuth 2.0 RFC 6749 (ottobre 2012): standard IETF per autorizzazione delegata, access token, flussi authorization code/implicit/client credentials/password. Fondamento di login social, API B2B, accesso a risorse utente.

Open SourceWebCyber Security OAuthOAuth 2.0RFC 6749IETFAuthorizationOpen SourceWebSecurity

Il problema delle password condivise

Fino ai primi anni 2000 l’integrazione tra applicazioni avveniva spesso chiedendo all’utente username/password del servizio terzo. Il “calendar sync” che chiede la password di Gmail, il tool di backup che chiede l’accesso Dropbox. Pattern inaccettabile per sicurezza (token sharing permanente, nessuna granularità, difficile revoca).

OAuth 1.0 (RFC 5849, aprile 2010) introduce il concetto di token delegato, ma con firma HMAC complessa. OAuth 2.0 ne è la riscrittura semplificata.

Il rilascio

RFC 6749 e RFC 6750 (bearer token) sono pubblicati dall’IETF nell’ottobre 2012. Editor: Dick Hardt (Microsoft). Il lavoro dura dal 2010, con contributi di Google, Facebook, Twitter, Yahoo.

Attori

  • Resource Owner — l’utente
  • Client — l’applicazione che vuole accedere
  • Authorization Server — emette token (es. accounts.google.com)
  • Resource Server — API protetta (es. www.googleapis.com)

Flussi (grant types)

  • Authorization Code — standard per webapp con backend; user-agent + backend scambio codice per token
  • Implicit — per SPA browser-only; deprecato nel 2021 (OAuth 2.1) per security
  • Resource Owner Password Credentials — user dà username/password al client; scoraggiato
  • Client Credentials — M2M (machine-to-machine), solo client_id + client_secret
  • Refresh Token — rinnovo access token senza re-login
  • Device Code (RFC 8628, 2019) — device con input limitato (Apple TV, smart TV)

Token

Gli access token sono opaqui (riferimento) o JWT firmati/crittografati. Bearer token nell’header HTTP:

GET /api/me HTTP/1.1
Authorization: Bearer eyJhbGc...
  • Scope — granularità di permessi (read:profile, write:posts)
  • Consent screen — utente approva permessi esplicitamente

OpenID Connect

OpenID Connect (OIDC) (febbraio 2014) è layer di autenticazione su OAuth 2.0, aggiunge id_token (JWT con claims utente standardizzati), scope openid, profile, email, UserInfo endpoint. Risolve la confusione tra OAuth (autorizzazione) e identità (autenticazione).

Evoluzione

  • OAuth 2.1 (draft 2020+) — consolida best practice, deprecated implicit/ROPC
  • PKCE (RFC 7636, 2015) — obbligatorio per tutti i client pubblici
  • Token Binding, DPoP — legatura token al client
  • FAPI — profili per finanza aperta

Implementazioni

  • Keycloak — OSS identity & access management
  • Auth0, Okta, Azure AD — SaaS
  • Ory Hydra, Ory Kratos — OSS cloud-native
  • Spring Security OAuth, Django OAuth Toolkit, Passport-OAuth2

Nel contesto italiano

OAuth 2.0 è fondamento di:

  • SPID — federazione identità digitali italiane (con profili ad-hoc)
  • CIE — Carta Identità Elettronica (OIDC-like)
  • PagoPA — autenticazione API
  • Login with Google/Facebook/Apple — ogni sito B2C
  • API B2B — banche, telco, PA aperti tramite OAuth scope-based
  • PNRR open data — API standardizzate con OAuth

Riferimenti: RFC 6749 (ottobre 2012). IETF. Dick Hardt editor. Flussi authorization code, client credentials, device code. OpenID Connect (febbraio 2014). PKCE RFC 7636. OAuth 2.1 draft 2020+.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi