Una tipica chiave API per un'applicazione REST di solito è significativamente meno sicura del controllo di accesso fornito da un JWT OAuth (Token Web JSON) per motivi relativi alla messaggistica del protocollo del livello dell'applicazione (ordine, sintassi, protezione dell'unità dati --o mancanza di esso), in contrasto con la protezione risultante solo dall'uso di un particolare algoritmo crittografico, modalità e / o dimensione della chiave. Tuttavia, non sarei sorpreso se i generatori di stringhe di chiavi API fossero più prevedibili dei generatori di stringhe token di accesso OAuth. Le chiavi API vengono spesso inviate come parametri di query HTTP GET all'interno della prima riga di una richiesta HTTP come mostrato qui con l'API JavaScript di Google Maps:
<script async defer src="https://maps.googleapis.com/maps/api/jskey=YOUR_API_KEY&callback=initMap" type="text/javascript"></script>
Dato che la stringa di chiavi API viene passata come parametro di query HTTP GET , è molto più semplice per i server Web intermedi (inclusi i proxy) e per i browser con linguaggi di scripting lato client come JavaScript o ActionScript per ottenere l'accesso in lettura e / o scrittura alla chiave API. Confronta questo con altri tipi di azioni HTTP come PUT o POST dove i parametri di query sono più strettamente nascosti dalle tecnologie sopra menzionate. Quasi tutti i software per server web scriveranno il valore dell'attributo src nel tag script sopra a access_log e / o error_log i file inclusi la chiave API, poiché i valori delle variabili dei parametri di query fanno parte delle variabili di ambiente CGI (Common Gateway Interface): SCRIPT_PATH e QUERY_STRING . Fai riferimento a CWE-598 per ulteriori informazioni.
I token di accesso OAuth d'altra parte, vengono generati su base per sessione. La concessione di un token di accesso da parte di un provider di autenticazione sicura non si verificherà, finché il fornitore non avrà ricevuto la prova che l'utente richiedente ha diritto ai privilegi richiesti; tale prova potrebbe essere stabilita attraverso la conoscenza delle credenziali (cioè una corrispondente coppia di nomi utente e password). Altre volte, il controllo dell'accesso potrebbe essere più restrittivo ei token di accesso sono forniti solo per un piccolo sottoinsieme di privilegi all'interno di una particolare app / sito / API sottocomponente, area operativa, sfera di controllo, ecc. Le autorizzazioni concesse in ultima istanza all'utente finale possono essere a grana fine quanto l'amministratore di sistema desidera. Nota che i token di accesso sono programmati per scadere dopo un determinato periodo di tempo e sono in grado di fornire un controllo di accesso discrezionale tra vari utenti / gruppi, privilegi / capacità, ecc.
I token di accesso vengono spesso trasferiti al di fuori dell'URL nel campo Autorizzazione dell'intestazione della richiesta HTTP, ad esempio. A volte, le implementazioni del framework di autenticazione personalizzata causano la trasmissione del token all'interno di un cookie con i flag HttpOnly , Secure e SameSite abilitati - oppure come intestazione di richiesta HTTP personalizzata come X-Auth-Token come documentata pubblicamente per il Cloud Storage SaaS di Oracle: API Oracle Cloud Storage Service :
È estremamente raro che le intestazioni delle richieste HTTP e i valori dei cookie vengano registrati dal software browser / server web; sono anche più difficili da accedere a livello di programmazione a causa di CORS (Cross Origin Resource Sharing). In confronto, le chiavi API sono passate come parametri GET HTTP possono essere estratti con JavaScript sul lato client dal DOM (Document Object Model).
Per questi motivi, la complessità richiesta per ottenere token di accesso da un framework di autenticazione come OAuth è molto più alta di quanto necessario per registrare l'utilizzo di una chiave API. Inoltre, la robustezza dei framework di autenticazione e autorizzazione consente al token di accesso di essere incapsulato all'interno del protocollo HTTP in modo che sia piuttosto difficile visualizzare o manomettere il token.