Motivo per utilizzare solo i segreti come chiavi API?

8

Molte API protette con le chiavi API usano solo la chiave segreta (cioè una password) senza qualcosa come un ID account o un nome utente.

Ad esempio, l'API Stripe utilizza la chiave segreta come nome utente in Autenticazione di base, lasciando la password vuota:

curl https://api.stripe.com/v1/charges \
   -u sk_test_BQokikJOvBiI2HOWgH4olfQ2:

Come funziona questo lato server? Cerca il segreto in un tavolo con i segreti come chiavi primarie, in testo normale? Cosa succede se questa tabella è trapelata?

Perché è meglio usare una combinazione account_id:secret_key nell'autenticazione? Puoi quindi memorizzare bcrypt(secret_key) anziché secret_key in testo normale, utilizzando account_id come chiave primaria.

correlati , ma non il stessa

    
posta Victor 12.04.2018 - 15:45
fonte

3 risposte

2

Quei tasti dell'API sono spesso chiamati token. Si presuppone spesso che abbiano una vita piuttosto breve e siano più o meno utilizzati come ID di sessione di alto livello. Non è una sessione vera perché vengono utilizzate per richieste stateless e portano solo l'identificazione dell'utente. Ma la loro vita dura generalmente da poche ore a diversi giorni. Inoltre, non sono mai una chiave di accesso primaria, quindi se il database di token viene compromesso, viene immediatamente svuotato e gli utenti chiedono nuove chiavi API.

    
risposta data 09.07.2018 - 13:49
fonte
1

Come già sottolineato, non c'è nulla che lo renda meno sicuro. Non è così difficile cercare nel database hash(secret) anziché account_id .

Dal punto di vista degli attaccanti, indovinare una chiave API è piuttosto difficile (la maggior parte di essi ha dimensioni considerevoli). Utilizzando lo schema account_id:secret (supponendo che il segreto sia la chiave API, non la password dell'utente) aggiunge sicuramente più sicurezza, ma senza alcun effetto pratico (i nomi degli account raramente sono un segreto, quindi ottenerli non è troppo difficile. indovina uno, oltre a indovinare una chiave).

Inoltre, pensa a dove vengono utilizzate tali chiavi API. Molto probabilmente nei processi automatizzati (cioè uno script python che fa un po 'di lavoro). Richiedere agli sviluppatori di aggiungere un nome account, li costringe a scriverlo nel codice o in qualche file di configurazione. In caso di attacco, preferisco perdere la mia chiave API, che posso facilmente revocare e scambiare per una nuova, invece di perdere account_id e API key . Usando il account_id , un utente malintenzionato ha solo bisogno della password per dirottare il tuo account, che è probabilmente molto meno sicuro rispetto a una lunga API key (quindi, accademicamente parlando, l'aggiunta di account_id indebolisce anche la tua sicurezza, mentre omettendo non è davvero abbassalo).

    
risposta data 09.07.2018 - 13:37
fonte
0

Many APIs protected with API keys only use the secret key (i.e. a password) without something like an account ID or username.

Le chiavi API o comunemente conosciute come token, vengono fornite dopo l'autenticazione corretta tramite account_id e password corretti. Questo può essere fatto durante le chiamate API in modo che il client fornisca una volta le credenziali per ottenere una chiave a sua volta utilizzata per le successive chiamate API. Le stesse credenziali vengono utilizzate per revocare o rinnovare un token.

Why is this better than to use a account_id:secret_key combo in the authentication?

Le API hanno lo scopo di consentire la comunicazione tra sistemi e non sono progettate per avere un'interazione diretta con l'utente, a mio avviso un ID account ha un significato diverso dall'identificazione di un sistema (client).

Tuttavia, il motivo principale per cui è preferibile utilizzare un token anziché account_id / password è evitare la frequente circolazione della password sul filo. Ricorda La natura senza stato dell'API, rende il client in grado di fornire credenziali per ogni richiesta.

    
risposta data 08.08.2018 - 16:26
fonte

Leggi altre domande sui tag