Ich arbeite an einer Website, auf der sich Benutzer mit OAuth-Anmeldeinformationen von Twitter, Google usw. anmelden können. Dazu muss ich mich bei diesen verschiedenen Anbietern registrieren und einen supergeheimen API-Schlüssel erwerben, den ich habe mit Pfand gegen verschiedene Körperteile zu schützen. Wenn mein Schlüssel gerissen wird, wird das Teil gerissen.
Der API-Schlüssel muss mit meiner Quelle übertragen werden, da er zur Laufzeit zur Ausführung von Authentifizierungsanforderungen verwendet wird. In meinem Fall muss der Schlüssel in der Anwendung in einer Konfigurationsdatei oder im Code selbst vorhanden sein. Das ist kein Problem, wenn ich von einer einzelnen Maschine aus baue und veröffentliche. Wenn wir jedoch die Quellcodeverwaltung in die Mischung einbauen, werden die Dinge komplizierter.
Da ich ein billiger Bastard bin, würde ich kostenlose Quellcodeverwaltungsdienste wie TFS in der Cloud oder GitHub bevorzugen. Dies lässt mich ein kleines Rätsel aufkommen:
Wie kann ich meinen Körper intakt halten, wenn sich meine API-Schlüssel in meinem Code befinden und mein Code in einem öffentlichen Repository verfügbar ist?
Ich kann mir eine Reihe von Möglichkeiten vorstellen, damit umzugehen, aber keine davon ist so befriedigend.
- Ich könnte alle privaten Informationen aus dem Code entfernen und sie nach der Bereitstellung wieder bearbeiten. Dies zu implementieren wäre ein schwerwiegender Schmerz (ich werde nicht auf die vielen Möglichkeiten eingehen) und ist keine Option.
- Ich könnte es verschlüsseln. Aber da ich es entschlüsseln muss, kann jeder mit der Quelle herausfinden, wie es geht. Zwecklos.
- Ich könnte für die private Quellcodeverwaltung bezahlen. LOL J / K Geld ausgeben? Bitte.
- Ich könnte Sprachfunktionen verwenden, um vertrauliche Informationen vom Rest meiner Quelle zu trennen und sie daher der Quellcodeverwaltung zu entziehen. Das ist, was ich jetzt tue, aber es könnte leicht durch versehentliches Einchecken der geheimen Datei vermasselt werden.
Ich bin wirklich auf der Suche nach einem garantierten Weg, um sicherzustellen, dass ich meine Daten nicht mit der Welt teile (außer mit Snapchat), der durch Entwicklung, Debugging und Bereitstellung reibungslos funktioniert und außerdem kinderleicht ist. Das ist völlig unrealistisch. Was kann ich also realistisch tun?
Technische Details: VS2012, C # 4.5, Quellcodeverwaltung wird entweder TF-Dienst oder GitHub sein. Derzeit wird eine Teilklasse verwendet, um die vertraulichen Schlüssel in einer separaten CS-Datei aufzuteilen, die der Quellcodeverwaltung nicht hinzugefügt wird. Ich denke, GitHub könnte den Vorteil haben, dass .gitignore verwendet werden könnte, um sicherzustellen, dass eine Teilklassendatei nicht eingecheckt wird, aber ich habe das schon früher vermasselt. Ich hoffe auf ein "oh, allgemeines Problem, so machst du es", aber ich muss mich vielleicht mit "das saugt nicht so viel, wie es haben könnte" zufrieden geben: /