2009-12-31 14 views
41

Per un progetto domestico, sviluppo un'applicazione desktop che richiede chiavi API da diversi servizi Web diversi.Come aprire un'applicazione di origine che utilizza le chiavi API

Ho eseguito e preparato questa applicazione per diventare open source e analizzare il problema di cosa fare con tali chiavi.

Il problema è questo: la mia comprensione è che queste chiavi API non dovrebbero essere visibili a chiunque usi l'applicazione o visualizzi/modifichi il codice sorgente. Dal lato del webservice, queste chiavi API vengono utilizzate per identificare le applicazioni che accedono alle loro API e consentire/bloccare l'utilizzo in modo appropriato. Nella maggior parte dei TOS per ricevere queste chiavi, in realtà si afferma esplicitamente che le chiavi non devono essere condivise con il mondo.

Attualmente tutte le mie chiavi sono fissi, ma io sono in un vicolo cieco su come gestire la situazione di chiavi private in un'applicazione open-source:

-Se le chiavi rimangono hard-coded, hanno sarò visibile pubblicamente non appena il mio codice sorgente sarà.

-Non posso davvero omettere il file sorgente con le chiavi dalla distribuzione del codice, dal momento che quindi non verrà compilato. Questo risolve tecnicamente il problema, ma introduce uno nuovo, inaccettabile .

-Se spengo le chiavi su un file .ini o altro file di configurazione e semplicemente non includo quel file nel mio repository di codice pubblico, dovrebbe comunque essere distribuito con il binario della mia applicazione in modo che app per funzionare, quindi le mie chiavi sarebbero visibili nella distribuzione dell'applicazione anziché nella distribuzione di origine. Non è un miglioramento. Qualsiasi ginnastica di crittografia che ho tentato di utilizzare su questo file INI aggiungerebbe la complessità per chiunque tenti di modificare il mio codice.

Quindi, per quanto riguarda il mio codebase (attualmente sotto Mercurial per il controllo della versione), qual è il modo migliore per gestire tutto in modo che il codice possa essere pubblico, ma le mie chiavi rimangono private?

+0

Quale linguaggio di programmazione stai utilizzando? –

+0

In questo caso sto usando C# – callingshotgun

risposta

15

Non so quale lingua stai usando, ma per esempio in C/C++ devi aggiungere un file di inclusione con le chiavi API e quindi lasciarlo fuori dal controllo del codice sorgente, invece aggiungi un file fasullo con in modo esplicito false chiavi API. La maggior parte delle lingue ha uno o l'altro modo di includere i file.

8

L'app deve utilizzare un file di configurazione. Questo file di configurazione viene caricato in fase di runtime e non dovrebbe influire sulla compilazione. Consente agli utenti di scaricare un file binario e utilizzare comunque la propria chiave API.

Come dice Kornel, è possibile includere un file di configurazione di esempio con una chiave API falsa, nel controllo del codice sorgente.

Un'altra opzione, è possibile parlare con le persone che gestiscono i servizi Web e chiedere una delle due cose.

  1. Una chiave temporanea, che funziona solo per funzionalità limitata. Ciò consentirebbe agli utenti di vedere le funzionalità di base della tua app, ma alcune persone non aggiornerebbero mai la chiave e semplicemente userebbero le cose di base.

  2. Parla con i servizi web per vedere se ti daranno una chiave API speciale per la tua applicazione. La versione open source richiederebbe agli utenti di inserire il proprio. Ma il tuo binario potrebbe usare uno standard.

L'idea di utilizzare una configurazione per le chiavi di API non è nuova o inaudita. I servizi Bit.ly lo fanno. E tutte le applicazioni open source che vedo che vengono utilizzate con Bit.ly richiedono il nome utente e la chiave API prima di poter essere utilizzata.

Non è diverso?

+0

Il problema con l'utilizzo di un file di configurazione è che sto distribuendo il programma nella sua forma compilata e utilizzabile altrove. Se dovessi seguire il percorso del file di configurazione, dovrei distribuire il programma con un file di configurazione pieno di chiavi API. – callingshotgun

+6

Per essere onesti, nulla impedisce a un hacker esperto di strappare le chiavi API anche dal modulo compilato. –

+0

Di quale sistema operativo stiamo parlando? Tutti i sistemi moderni dispongono di un sistema di installazione e gestiscono tutti i file di configurazione in un modo o nell'altro. Non è necessario spedirlo con chiavi API utilizzabili. Ho visto diversi progetti che non verranno eseguiti finché la chiave non sarà una chiave valida. L'applicazione controlla che la chiave funzioni all'avvio. Se vuoi spedire una versione demo di qualche tipo, puoi provare a fornire una versione temporanea. Ho aggiornato la mia risposta con questo pensiero –

Problemi correlati