Per riassumere:
- Hai una chiave API rilasciata da un venditore in modo che tu possa utilizzare la loro API e hai l'obbligo di impedire che questa chiave sia conosciuta da chiunque altro
- Stai effettuando chiamate all'API del fornitore (che richiede la chiave API) nel codice dell'applicazione
- Stai distribuendo l'applicazione ai sistemi in cui i clienti hanno accesso ai binari e quindi potrebbero potenzialmente decompilare / deobfuscare il codice o intercettare il traffico
Il modo migliore per evitare il compromesso di questa chiave è di mantenerne il controllo. Ciò significa che non dovrebbe mai essere distribuito su un server dove chiunque oltre a te potrebbe leggere il binario e non andare mai oltre un link di comunicazione che non controlli.
In definitiva, se i binari sono fuori dal tuo controllo, tutto ciò che li circonda è fuori dal tuo controllo. Allo stesso modo, se qualcuno può intercettare il traffico, può acquisire la chiave API ( potenzialmente anche se stai usando SSL ).
Riesco a vedere due modi principali per eseguire questa operazione, che non includono la chiave API privata nell'applicazione distribuita:
Ottieni una chiave API univoca per ogni distribuzione
Ciò richiederebbe una relazione aggiuntiva con il venditore, in cui è possibile ottenere le chiavi o chiedere ai clienti di ottenere le chiavi.
Questo è in realtà abbastanza comune con, ad esempio, i prodotti che utilizzano l'API di Google Maps. Il creatore del software ha la propria chiave che utilizza durante lo sviluppo / esecuzione della copia, ma non lo include nel software e, invece, richiede all'utente, come utente che installa detto software, di andare su Google e ottenere la propria API chiave. Il software ha semplicemente un'opzione di configurazione per impostare la chiave dell'API di Google Maps da utilizzare.
In effetti, molti fornitori che emettono per contratto chiavi API richiedono che tu faccia le cose in questo modo, quindi potresti anche essere sulla strada sbagliata, e questa potrebbe essere l'unica soluzione che puoi utilizzare in base ai termini del venditore di servizio e / o eventuali contratti legali che potresti avere con loro.
Utilizza un proxy
Imposta un'API proxy, in cui l'applicazione chiama l'API (sui tuoi server) e, a sua volta, l'API chiama l'API del fornitore utilizzando la chiave.
Potrebbe essere necessaria una protezione aggiuntiva sull'API, ad esempio, per garantire che solo l'applicazione la stia utilizzando. Questo potrebbe essere fatto da:
- rendendo la funzionalità così specifica nient'altro che la tua app possa utilizzarla
- Whitelist IP
- Alcuni meccanismi di autorizzazione / autorizzazione già in uso per i tuoi server
- Il tuo sistema di chiavi API in cui puoi inviare le chiavi ai tuoi clienti
La cosa da tenere a mente qui è che potresti non essere autorizzato a farlo. Il tuo fornitore potrebbe avere Termini di servizio o contratti legali che ti impediscono di creare un "servizio di aggregazione" o un proxy, quindi devi verificarlo.
Gestione del comportamento scorretto
Anche se la tua chiave non viene compromessa, se uno dei tuoi clienti sta facendo qualcosa che impedisce al venditore di bloccare la tua chiave, improvvisamente TUTTI i tuoi clienti sono disabilitati e l'unica soluzione è aggiornare tutti gli altri.
Allo stesso modo, se tu vuoi bloccare uno dei tuoi clienti (ad esempio, hanno smesso di pagare, hanno piratato il software, ecc.) allora non puoi farlo senza rilasciare un aggiornamento a tutti gli altri, e quindi disabilitando la chiave.
La logistica di questo per qualcosa al di là di una manciata di clienti diventerà presto insostenibile.
Sia che tu operi come proxy o che disponga di una chiave univoca per ogni installazione, puoi gestire una qualsiasi di queste situazioni in modo relativamente semplice (e con poco o nessun impatto su nessun altro).
Cercare di proteggere la chiave mentre è integrata nel software è in definitiva uno sforzo inutile. Qualunque cosa tu faccia, qualsiasi attaccante che abbia accesso ai binari, alla sorgente e / o al canale di comunicazione e sia determinato a sufficienza per ottenere la chiave, sarà in grado di farlo.
Quindi non incorporarlo. "L'unica mossa vincente è non giocare."