Qual è la differenza tra le chiavi API e i token API?

3

Da tutta la ricerca che ho fatto, ho trovato che le chiavi API sono meno sicure dei token di accesso (con l'uso di oAuth) e dovrebbero essere utilizzate solo a scopo di monitoraggio.

Ma da quello che ho capito, il server genera entrambi. Quindi, se dovessi usare lo stesso algoritmo duro per creare il mio token di accesso, o per creare la chiave API, non lo renderei simili? Gli esempi aiuterebbero la causa di comprenderli meglio come non ne ho trovato.

Alcuni riferimenti: link link

    
posta Elie Saad 14.06.2017 - 09:58
fonte

2 risposte

3

Le chiavi API sono pubbliche, per intenzione. Sono un meccanismo di autorizzazione, non un meccanismo di autenticazione (questo è menzionato nei tuoi link). Non importa come siano generati ma importa come sono gestiti . In altre parole: "chiunque abbia questa chiave può entrare".

Quindi, usi le chiavi API quando vuoi autorizzare e non devi autenticarti. Utilizzi token di autenticazione, che sono protetti nella gestione , per autenticare la connessione. In altre parole, "ecco la tua chiave unica per permetterti di entrare in questo momento".

    
risposta data 14.06.2017 - 11:18
fonte
1

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.

    
risposta data 14.06.2017 - 11:23
fonte

Leggi altre domande sui tag