In ambito informatico, l'autenticazione è quel processo mediante il quale un sistema conferma l'identità di
una persona presso un sistema al fine di consentire l'accesso alle sue risorse. Esistono diversi modi con i
quali un sistema può identificare i propri utenti. A prescindere dai dettagli implementativi, tutte le procedure di
autenticazione si basano sul richiedere qualcosa che l'utente ha o possiede. I meccanismi più noti sono quelli
basati su username e password e quelli basati su smartcard.
OAuth2
Per evitare di dover gestire direttamente l'autenticazione degli utenti è possibile affidarsi a delle autorità
esterne che verifichino al posto del nostro sistema le credenziali. A tal fine, è nato nel 2006 il
protocollo di sicurezza Open Authorization, OAuth, oggi arrivato alla
versione 2.
Quando si parla di OAuth normalmente è possibile individuare diversi attori in gioco:
- il client: è l'applicazione che tenta di accedere all'account dell'utente. Detto in altre
parole è la nostra applicazione. - L'authorization server è il server che si preoccupa di identificare l'utente e accede alle
informazioni dell'utente. Nelle
implementazioni più complesse l'accesso alle informazioni dell'utente vengono gestite da un Resource
Server. - Il resource owner: è l'entità proprietaria di dati ad accesso controllato.
Il funzionamento di OAuth può essere rappresentato dal sequence diagram sotto riportato:
Vediamo le varie fasi:
- il client richiede l'autorizzazione al resource owner.
- Viene restituito un authorization grant che rappresenta l'autorizzazione del resource owner. La
specifica definisce 4 tipi di grant: authorization code, implicit, resource owner password credentials e client
credentials. - Il client richiede un access token all'authorization server grazie all'authorization grant ottenuto allo
step
precedente. - L'authorization server autentica il client, valida l'authorization grant e rilascia un access token.
- Il client richiede la risorsa al resource server mediante l'access token.
- Il resource server valida il token e fornisce le risorse richieste.
La sequenza di operazioni appena presentata è un sequence diagram di massima, nel senso che in base al tipo di grant concesso il flusso delle operazioni cambia. Vediamo ora questi 4 tipi di flussi.
Authorization Code Flow
L'idea alla base di OAuth è la seguente: quando un utente vuole utilizzare l'applicazione (client), deve autorizzare
l'authorization server a fornire i suoi dati all'applicazione client. L'applicazione client deve essere
registrata presso l'authorization server.
Normalmente nella fase di registrazione vengono generati un ID
client ed un secret (altro modo di dire password). Questa coppia di valori viene in
seguito utilizzata per generare
i token utilizzati nella comunicazione sicura, in termini di veridicità dell'informazione stessa,
senza la necessità di far girare la password dell'utente.
OAuth al giorno d'oggi viene utilizzata da una moltitudine di azienda del settore IT tra cui vale la pena citare
Twitter, Google, Microsoft e Facebook. Per maggiori informazioni su OAuth è possibile consultare questo articolo.
Si vedrà nei prossimi paragrafi come utilizzare OAuth ed interagire con i vari Authorization Server con l'ausilio di una libreria open source scritta in Java e presente su GitHub: Scribe.