Sto lavorando su un sito Web che consentirà agli utenti di accedere utilizzando le credenziali OAuth da utenti come Twitter, Google, ecc. Per fare ciò, devo registrarmi con questi vari provider e ottenere una chiave API super-segreta che devo proteggere con pegni contro varie parti del corpo. Se la mia chiave viene cancellata, la parte viene strappata.
La chiave API deve viaggiare con la mia fonte, poiché viene utilizzata in fase di esecuzione per eseguire richieste di autenticazione. Nel mio caso, la chiave deve esistere all'interno dell'applicazione in un file di configurazione o all'interno del codice stesso. Questo non è un problema quando costruisco e pubblico da una singola macchina. Tuttavia, quando inseriamo il controllo del codice sorgente nel mix, le cose diventano più complicate.
Dato che sono un bastardo a buon mercato, preferirei di gran lunga utilizzare servizi di controllo del codice sorgente gratuiti come TFS nel cloud o GitHub. Questo mi lascia un piccolo enigma:
Come posso mantenere intatto il mio corpo quando le mie chiavi API sono nel mio codice e il mio codice è disponibile in un repository pubblico?
Posso pensare a un certo numero di modi per gestirlo, ma nessuno di questi è soddisfacente.
- Potrei rimuovere tutte le informazioni private dal codice e modificarlo di nuovo dopo la distribuzione. Questo sarebbe un grave problema da implementare (non illustrerò in dettaglio i molti modi), e non è un'opzione.
- Potrei crittografarlo. Ma siccome devo decriptarlo, chiunque abbia la fonte potrebbe capire come farlo. Inutile.
- Potrei pagare per il controllo del codice sorgente privato. LOL j / k spendere soldi? Per favore.
- Potrei usare le funzionalità del linguaggio per separare le informazioni sensibili dal resto della mia fonte e quindi tenerle dal controllo del codice sorgente. Questo è quello che sto facendo ora, ma potrebbe essere facilmente rovinato controllando erroneamente il file segreto.
Sono davvero alla ricerca di un modo garantito per garantire che non condivido i miei dati personali con il mondo (eccetto su snapchat) che funzionerà senza intoppi attraverso lo sviluppo, il debugging e l'implementazione, oltre ad essere infallibile. Questo è completamente irrealistico. Quindi, cosa posso realisticamente fare?
Dettagli tecnici: VS2012, C # 4.5, il controllo del codice sorgente sarà il servizio TF o GitHub. Attualmente si utilizza una classe parziale per suddividere i tasti sensibili in un file .cs separato che non verrà aggiunto al controllo del codice sorgente. Penso che GitHub possa avere il vantaggio dato che .gitignore potrebbe essere usato per assicurare che il file di classe parziale non sia archiviato, ma l'ho già rovinato prima. Sto sperando in un "oh, problema comune, questo è come lo fai" ma potrei dover accontentarmi di "che non fa schifo quanto potrebbe",: /