Qualche giorno fa stavamo facendo un po’ di brainstorming su un progetto al quale stiamo lavorando e si discuteva sui meccanismi di autenticazione necessari. Il sistema è complesso e coinvolge varie tipologie di utenti con livelli di autorizzazione differenti che possono accedere da diversi device via browser o App mobile.
Nella discussione ho notato che non a tutti era chiara la differenza tra token a API key, è successo infatti che queste due parole venissero utilizzate da qualcuno indistintamente come sinonimi.
In realtà, pur essendo entrambi oggetti utilizzati in ambito autenticazione, sono ben caratterizzati e diversi per definizione, creazione, ambito di utilizzo, durata, sicurezza e scopo.
Un identificatore univoco che viene utilizzato principalmente all’interno del codice per autenticare e identificare il chiamante nell’accesso a un’API. Solitamente si tratta di una lunga sequenza di lettere e numeri.
Un dato che identifica una sessione utente, viene generalmente utilizzato per brevi periodi di tempo e può contenere informazioni come il ruolo dell’utente, le autorizzazioni di accesso e scadenze.
Vengono create “staticamente” una tantum e rimangono valide fino alla creazione di un nuova chiave. Possono opzionalmente essere configurate per scadere dopo un certo periodo di tempo.
Generati dinamicamente in seguito ad un processo di login o autenticazione. Sono caratterizzati dal fatto di scadere abbastanza rapidamente ma posso essere rigenerati per mantenere la sessione.
Le API key sono utilizzate principalmente per autenticare l’accesso a servizi web, API o risorse online. Sono caratterizzate da un prefissato insieme di permessi sull’utilizzo del servizio web o API.
I token sono più focalizzati su cosa un certo utente può fare o a quali dati può accedere. Possono anche indicare informazioni aggiuntive come ruoli specifici o informazioni sull’utente stesso.
Le API key, una volta generate, possono avere una data di scadenza o rimanere valide fino alla revoca o sostituzione.
I token rimangono validi generalmente per un tempo limitato e scadono abbastanza rapidamente. Possono essere rinnovati durante la sessione attiva.
Devono essere trattate con molta attenzione e scambiate attraverso canali sicuri. Per loro natura hanno lunga durata e forniscono accesso completo. Se compromesse devono essere revocate e rigenerate.
I token sono stati progettati pensando alla sicurezza. Per loro natura hanno vita breve e scadono automaticamente. Un token permette di accedere solo ai dati ai quali l’utente a cui si riferisce ha accesso.
Utilizzate generalmente per comunicazioni da server a server, per l’accesso a dati pubblici come meteo, borsa, notizie o per integrare sistemi di terze parti.
I token sono usati per per autenticare un utente di un certo sistema generalmente a livello di client. Si usano per il controllo di accesso su dati e risorse, per fornire accessi temporanei, per gestire le sessioni..
Vi è mai capitato di vedere in qualche sito web che non venisse caricata correttamente la Google Map o che ci fosse un messaggio scritto sopra? Questo avviene generalmente perché non è stata fornita una API Key richiamando le API Maps di Google. Se viene fornita una API key corretta si ha accesso a tutte le funzionalità offerte dalle API di Maps.
Fare esempi di token è un po’ più complesso e si dovrebbe analizzare qualche spezzone di codice sorgente, basti sapere che la maggior parte delle App mobili sfruttano questo meccanismo per autenticare e tenere traccia dell’utente connesso, in questo modo possono sapere che utente sta facendo l’operazione, quali sono i suoi privilegi e a quali dati può accedere. Tra i meccanismi più utilizzati che sfruttano il concetto di token c’è JWT: JSON Web Token.