Cos'è OIDC: Da perché ne abbiamo bisogno a come funziona
Scopri cos'è OIDC, perché è necessario e come funziona. Scopri come OIDC estende OAuth 2.0 per l'autenticazione e comprendi i suoi componenti principali, inclusi i Token ID, gli ambiti e l'endpoint userinfo.
Definizione di OpenID Connect (OIDC)
OpenID Connect (OIDC) è un protocollo di autenticazione dell'identità costruito sopra OAuth 2.0. Mentre OAuth 2.0 fornisce solo autorizzazione, OIDC aggiunge capacità di autenticazione, offrendo una soluzione più standardizzata per scenari di autorizzazione e autenticazione degli utenti.
In poche parole: OIDC = Protocollo di autorizzazione + Autenticazione dell'identità.
Perché abbiamo bisogno di OIDC?
Per capire perché abbiamo bisogno di OIDC, esploriamo prima i concetti fondamentali e il flusso di lavoro di OAuth 2.0 e le sue limitazioni nelle applicazioni pratiche. Analizzando scenari specifici, vedremo perché abbiamo bisogno di OIDC rispetto a OAuth 2.0.
Concetti chiave e flusso di autorizzazione di OAuth 2.0
OAuth 2.0 (Open Authorization) è un protocollo di autorizzazione che consente agli utenti di concedere alle applicazioni di terze parti l'accesso alle loro risorse senza condividere le proprie credenziali come nomi utente e password. Sono coinvolti quattro ruoli principali:
- Proprietario della risorsa: L'utente che possiede le risorse
- Server delle risorse: Il server che memorizza le risorse degli utenti
- Cliente: L'applicazione di terze parti che richiede l'accesso alle risorse degli utenti
- Server di autorizzazione: Il server che verifica l'identità degli utenti e rilascia token di accesso
Un tipico flusso di autorizzazione OAuth 2.0 funziona così:
Come mostrato, OAuth 2.0 gestisce principalmente il rilascio di token di accesso per clienti di terze parti per accedere alle risorse degli utenti.
La limitazione di OAuth 2.0
Il protocollo OAuth 2.0 si concentra solo sul rilascio di token di accesso. Il server delle risorse valida questi token e restituisce le risorse autorizzate. Tuttavia, il server delle risorse non conosce l'identità dell'utente.
Questo non era un problema significativo nell'ecosistema internet primordiale.
Tuttavia, con l'evolversi di piattaforme come Google, Facebook, Twitter e Github, che hanno iniziato ad offrire risorse utente ricche, queste sono diventate preziose per le applicazioni di terze parti.
Mentre OAuth 2.0 eccelle nell'autorizzare l'accesso di terze parti alle risorse degli utenti, presenta delle limitazioni. Uno scenario tipico è: poiché le informazioni utente sono anche una risorsa, quando le applicazioni di terze parti devono accedere a informazioni utente di base, le diverse piattaforme (come Google, Facebook, Twitter) restituiscono le informazioni utente in formati diversi, creando sfide per gli sviluppatori.
OIDC è stato creato per affrontare queste sfide.
Ruoli in OIDC
Per abilitare l'autenticazione dell'utente sopra OAuth 2.0 e affrontare le sue limitazioni, OIDC ha introdotto tre ruoli:
- Utente Finale (EU): L'utente finale, corrispondente al Proprietario della Risorsa di OAuth 2.0
- Parte Affidabile (RP): La parte dipendente, corrispondente al Cliente di OAuth 2.0
- Provider OpenID (OP): Il fornitore del servizio di autenticazione dell'identità, corrispondente al Server di Autorizzazione e al Server delle Risorse di OAuth 2.0
L'OP è il ruolo centrale, fornendo sia la funzionalità di autorizzazione di OAuth 2.0, sia trattando le informazioni utente come una risorsa separata.
Come funziona OIDC?
Il processo di autenticazione di OIDC è simile a OAuth 2.0, ma poiché l'OP combina i ruoli di Server di Autorizzazione e Server delle Risorse, ritorna sia un Token di Accesso che un Token ID. Il Token ID contiene informazioni di identità dell'utente e l'RP può verificare l'identità dell'utente convalidando il Token ID.
Un tipico flusso di lavoro appare così:
Questo standardizza come vengono ottenute le informazioni sugli utenti attraverso diverse piattaforme, eliminando la necessità per le applicazioni di terze parti di gestire le differenze specifiche della piattaforma.
Token ID (token di identità) in OIDC
Quando gli utenti autorizzano applicazioni di terze parti, l'OP restituisce sia un Token di Accesso OAuth 2.0 che un Token ID in formato JWT. Questo Token ID contiene informazioni sull'identità dell'utente come ID utente, nome utente, email e avatar. L'RP può confermare l'identità dell'utente convalidando il Token ID.
Come JWT, il Token ID contiene affermazioni standardizzate, includendo queste affermazioni principali richieste:
iss
(Emittente): Identificatore univoco del Provider OpenID che emette il Token IDsub
(Soggetto): Identificatore univoco dell'utenteaud
(Pubblico): Identificatore dell'applicazione cliente che riceve il Token IDexp
(Tempo di scadenza): Quando scade il Token IDiat
(Emesso a): Quando è stato emesso il Token ID
Per informazioni dettagliate sui token ID, consulta: Token ID.
Endpoint userinfo
L'Endpoint UserInfo è un'API HTTP standardizzata fornita dall'OP per ottenere dettagli autenticati sull'utente. Inviando richieste GET o POST con un Token di Accesso a questo endpoint, puoi ricevere informazioni sull'utente in formato JSON. I dati restituiti includono campi standardizzati come ID utente univoco (sub), nome utente (name), email e immagine.
Il processo di ottenimento delle informazioni utente segue lo stesso schema di accesso alle risorse protette in OAuth 2.0. Di solito, le informazioni utente ottenute dall'endpoint userinfo sono più complete di quelle nel token ID, poiché il token ID serve principalmente per l'autenticazione dell'identità e informazioni utente di base.
Per informazioni dettagliate sull'endpoint userinfo, consulta: Endpoint userinfo.
Nota che le informazioni sull'utente ricevute dall'endpoint userinfo dipendono dagli ambiti richiesti e dalle autorizzazioni concesse durante l'autorizzazione.
Ambiti in OIDC
Gli ambiti in OIDC definiscono quali informazioni utente può accedere la RP. OIDC definisce ambiti standard, con l'ambito openid
che è obbligatorio nei flussi di autenticazione OIDC.
Gli ambiti standard comuni includono:
openid
: Indica una richiesta di autenticazione OIDCprofile
: Informazioni utente di base come nome e avataremail
: Informazioni email dell'utentephone
: Numero di telefono dell'utenteaddress
: Informazioni di indirizzo dell'utente
Diversi ambiti restituiscono diverse informazioni utente. Ad esempio, richiedere openid profile email
restituisce informazioni utente di base ed email nel Token ID e Userinfo, mentre openid profile email phone address
include numero di telefono e informazioni di indirizzo.
Gestione dell'identità basata su OIDC
OIDC non è solo un protocollo di autenticazione; è un potente strumento per costruire sistemi di gestione dell'identità flessibili e scalabili. Aggiungendo uno strato di autenticazione a OAuth 2.0, standardizzando le risorse di informazioni utente e ponendo le basi per funzionalità estese di gestione dell'identità, OIDC abilita vari scenari di gestione dell'identità:
- Single Sign-On (SSO): OIDC supporta naturalmente SSO attraverso informazioni di sessione utente estese, abilitando gestione dello stato di login unificato e condivisione dell'identità cross-applicazioni
- Gestione della struttura organizzativa: Le informazioni estese di organizzazione dell'utente possono gestire strutture organizzative complesse, inclusi gerarchie dipartimentali e relazioni tra gruppi di utenti
- Gestione delle autorizzazioni: Gli attributi di autorizzazione utente estesi abilitano controllo dell'accesso alle risorse dettagliato, inclusa informazione di ruolo e configurazione della politica di autorizzazione
La flessibilità di OIDC si adatta alle esigenze in evoluzione di gestione dell'identità. Molti sistemi di gestione dell'identità sono costruiti su OIDC, come Logto, che fornisce funzionalità di SSO, gestione organizzativa e gestione delle autorizzazioni.