Tutto quello che devi sapere sui token API
Dall'autenticazione base allo standard OAuth: cosa sono i token API
- Autore: Alessandra Caraffa
- //
- Data: 21/06/2022
- //
- Lettura: 4 min
Le API, Application Programming Interfaces, nascono allo scopo di esporre dati e funzioni proprietari a terze parti: alle enormi potenzialità dello strumento corrispondono perciò, inevitabilmente, i rischi derivanti da un’esposizione non consapevole dei dati.
La combinazione di autenticazione OAuth e certificati SSL, d’altro canto, offre quanto di più evoluto a disposizione in termini di sicurezza dei sistemi. Per capire meglio di che si tratta, partiamo da uno degli elementi cardine dell’architettura API driven, quello che permette il passaggio da una forma di autenticazione di base allo standard OAuth, il primo passo verso un’architettura Zero Trust.
Vediamo cos’è e come funziona un token API, e quali sono le buone pratiche per generare e gestire le proprie chiavi d’accesso limitando i rischi connessi all’esposizione dei dati via API.
API e sicurezza informatica
Secondo gli analisti del settore, un uso poco attento delle API potrebbe trasformarsi in breve tempo nella porta d’accesso privilegiata per gli attacchi informatici (Gartner, 2021). La rapida diffusione delle API e delle API driven architecture può condurre i software tanto quanto le aziende ad esporsi, tramite le proprie applicazioni web, a importanti falle di sicurezza, che possono arrivare a scoprire fino al 40% in più del “fianco” da proteggere (Gartner, 2019).
Il problema non nasce da una scarsa sicurezza delle risorse: grazie alle comunicazioni criptate tramite certificati SSL e all’autenticazione OAuth tramite header, infatti, le API garantiscono i più alti livelli di protezione a disposizione in ambito IT. Uno studio del 2021 di Salt Security sulla sicurezza delle API sottolinea che più del 25% delle imprese che utilizzano le API in produzione non ha messo in campo alcuna strategia di sicurezza.
Se oltre il 90% delle aziende IT ha sperimentato problemi di sicurezza in ambito API nel 2020 (Gartner, 2021), è perché se è vero che le grandi potenzialità dell’integrazione API sono state sin da subito chiare a tutti, è altrettanto vero che non è stata dedicata la dovuta attenzione al tema dei rischi collegati all’esposizione dei dati a terze parti - cosa che è in ultimo il compito delle Application Programming Interfaces, o API.
API key e token API
L’architettura API driven si fonda sull’esposizione di dati e funzioni a parti terze, quindi è fondamentale dotarsi di una strategia di difesa consapevole. Prendiamo l’esempio dell’esposizione involontaria delle API key, tra le falle più temute dalle aziende che usano abitualmente le API: è sufficiente che un singolo sviluppatore faccia l’errore di copiare l’API key in un forum o un repository pubblico, come GitHub o Stack Overflow, per esporre pubblicamente la propria chiave API e consentire a qualunque applicazione di usarla per interpellare dei servizi web - ovviamente in nome e per conto del titolare della chiave.
Le API keys sono codici alfanumerici che non possono sfruttare i meccanismi di controllo tipici dell’autenticazione a due fattori, perché si compongono essenzialmente di una stringa opaca, criptata, senza alcun evidente significato per l’utente. Possono però essere usate, in fase di autenticazione base, per generare un token API, e cioè una credenziale d’accesso sicura che permette di interagire - all’interno di limiti funzionali e temporali ben precisi - con i servizi web richiesti.
Nel marketplace di OpenAPI, per esempio, la API key viene generata nel momento di iscrizione al servizio, e può essere usata per creare dei token API tramite il servizio di autenticazione OAuth, il protocollo di rete standard ad oggi più usato per garantire la sicurezza delle interazioni via API.
Cos’è un token API?
Ma partiamo dal principio: un token API è una stringa alfanumerica che si trova nell’header di ogni chiamata API e che permette di risalire a determinate informazioni sull’utente. Quando parliamo di chiamate tra API RESTful, in particolare, l’header (o intestazione) di ogni richiesta deve poter indicare:
- il token di autorizzazione, o token API, nel formato Bearer;
- il metodo HTTP, cioè la specifica del tipo di richiesta (per esempio: delete).
Se l’API key è la credenziale di livello base che consente l’accesso a qualunque marketplace API, il token API è il “biglietto d’ingresso” vero e proprio, quello che consente di formulare un header valido per una richiesta API e cioè iniziare ad interagire con le applicazioni web di terze parti.
Il token API è una stringa in formato Bearer, e cioè letteralmente “al portatore”: ciò significa che non ha alcun valore nominale, ma appartiene semplicemente a chi ne è in possesso. Va da sé, viste queste premesse, che chiunque finisca in possesso del token API di un certo servizio web diventa automaticamente in grado di formulare richieste a nome e per conto dell’applicazione in questione.
È il motivo principale per cui ci si riferisce spesso al token API come a una sorta di password, e la ragione fondamentale per cui se ne raccomanda lo stesso uso consapevole che si riserva alle chiavi d’accesso importanti.
Dall’autenticazione base a OAuth
Con la generazione di un token API, si passa quindi dall’autenticazione base a quella OAuth, perfettamente coerente con un’architettura zero trust e abbastanza affidabile da consentire l’accesso alle risorse remote dei server che si interrogano tramite API.
OAuth è uno standard di autenticazione che permette di delegare l’uso delle credenziali di accesso alle risorse direttamente alle app, senza coinvolgere nel processo l’utente e le sue credenziali personali, come per esempio una API key.
È tramite lo standard OAuth che vengono introdotti al posto delle credenziali nominali dei token Bearer, come i token API o i JSON Web Token (JWT), che permettono alle web app di “presentarsi” direttamente al server e comunicargli di possedere tutte le autorizzazioni per poter continuare l’interazione.
Nel momento in cui dati e funzioni vengono esposti tramite API, infatti, viene anche definito chi, come, quando e con quali limitazioni può accedervi. Per inviare una richiesta tramite API al server, quindi, bisogna innanzitutto dimostrare di avere le autorizzazioni necessarie per inoltrare la richiesta. Tutto questo il server può verificarlo dal token, senza avere alcun tipo di accesso a dati sensibili come le credenziali dell’utente finale.
Come funzionano i token API
I token API, essendo “al portatore”, non richiedono ulteriori specifiche per essere utilizzati. Una volta generato un token API, questo verrà automaticamente inserito nell’header di tutte le chiamate API eseguite attraverso quelle credenziali.
Ogni volta che si interpella un servizio web, il server verifica la validità della richiesta proprio a partire dalla validità del token API, che a questo punto rappresenta una sorta di “firma” che viene apposta a ogni chiamata.
Oltre a definire il punto di partenza della chiamata, il token API individua i confini di operatività concessi all’operatore, che per esempio può aver deciso a monte di usare soltanto alcuni metodi HTTP oppure di poter interagire solo con determinati endpoint, o url.
Oltre a una firma, il token API è anche un biglietto d’ingresso molto dettagliato - comprensibile solo al server e completamente illeggibile per l’utente - che contiene tutte le opzioni a disposizione del richiedente.
Quando un’applicazione client vuole accedere a risorse protette su un certo server tramite API, segnala tramite il token di aver ricevuto le autorizzazioni necessarie a procedere. Ma è tenuta a segnalare anche tutto quello che potrebbe aver intenzione di fare usando quelle credenziali, e per quanto tempo.
Token API: il Time To Leave e gli scopes
In termini di sicurezza, l’uso di token a scadenza permette di limitare in maniera importante i rischi connessi alla compromissione di un token: come è facile intuire, un token è vulnerabile fintantoché funziona.
L’indicazione degli scopes, invece, serve a definire le strade che è possibile percorrere e il tipo di richieste consentite all’interno di un’interazione tra web app. Possono esistere token autorizzati a usare tutte le funzioni (ovvero i metodi HTTP) a disposizione su particolari endpoint, ma anche token il cui uso è limitato a metodi precisi (es. solo GET e DELETE), che possono però essere validi su tutti gli endpoint.
Per generare un token API sul marketplace di Openapi, per esempio, è sufficiente inserire l’email con cui si è sottoscritto il servizio insieme all’API key associata all’account, ed indicare proprio questi due semplici criteri, nella forma di:
- durata del token, cioè l’indicazione del TTL (Time To Leave) connesso al titolo d’accesso - non superiore a 12 mesi su Openapi;
- scopes, ovvero le combinazioni di metodo HTTP + Endpoint che si prevede di voler utilizzare interrogando le API.
Una volta definiti scadenza e scopes del token API, vengono stabiliti dei confini netti che definiscono e limitano, allo stesso tempo, l’ambito di operatività della credenziale e la superficie che questa espone a eventuali pericoli.