Sto lavorando su un sito Web che consentirà agli utenti di accedere utilizzando le credenziali OAuth come Twitter, Google, ecc. Per fare questo, devo registrarmi con questi vari provider e ottenere una chiave API super segreta che ho per proteggere con impegni contro varie parti del corpo. Se la mia chiave viene strappata, 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 creo e pubblico da una singola macchina. Tuttavia, quando gettiamo il controllo del codice sorgente nel mix, le cose diventano più complicate.
Dato che sono un bastardo economico, preferirei di gran lunga utilizzare i servizi di controllo del codice sorgente gratuiti come TFS nel cloud o GitHub. Questo mi lascia con un leggero 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 diversi modi per gestirlo, ma nessuno di loro è così soddisfacente.
- Potrei rimuovere tutte le informazioni private dal codice e modificarle nuovamente dopo la distribuzione. Questo sarebbe un grave dolore da implementare (non descriverò in dettaglio i molti modi) e non è un'opzione.
- Potrei crittografarlo. Ma come devo decifrarlo, chiunque abbia la fonte potrebbe capire come farlo. Inutile.
- Potrei pagare per il controllo della fonte privata. LOL j / k spendi soldi? Per favore.
- Potrei usare le funzionalità del linguaggio per separare le informazioni sensibili dal resto della mia fonte e quindi mantenerle dal controllo della fonte. Questo è quello che sto facendo ora, ma potrebbe essere facilmente rovinato controllando erroneamente il file segreto.
Sto davvero cercando un modo garantito per assicurarmi di non condividere i miei privati con il mondo (tranne su Snapchat) che funzioneranno senza problemi attraverso lo sviluppo, il debug e l'implementazione e che siano anche infallibili. Questo è completamente irrealistico. Quindi cosa realisticamente posso fare?
Dettagli tecnici: VS2012, C # 4.5, il controllo del codice sorgente sarà TF service o GitHub. Attualmente si utilizza una classe parziale per dividere le chiavi sensibili in un file .cs separato che non verrà aggiunto al controllo del codice sorgente. Penso che GitHub possa avere il vantaggio in quanto .gitignore potrebbe essere usato per garantire che il file di classe parziale non sia archiviato, ma l'ho rovinato prima. Spero in un "oh, problema comune, ecco come lo fai", ma potrei accontentarmi di "che non fa schifo quanto potrebbe avere",: /