Je travaille sur un site Web qui permettra aux utilisateurs de se connecter en utilisant des informations d'identification OAuth telles que Twitter, Google, etc. Pour ce faire, je dois m'inscrire auprès de ces différents fournisseurs et obtenir une clé API super secrète que j'ai. protéger avec des gages contre diverses parties du corps. Si ma clé est gankée, la pièce est tirée.
La clé d'API doit voyager avec ma source, car elle est utilisée au moment de l'exécution pour exécuter les demandes d'authentification. Dans mon cas, la clé doit exister dans l'application dans un fichier de configuration ou dans le code lui-même. Ce n'est pas un problème lorsque je construis et publie à partir d'une seule machine. Cependant, lorsque nous intégrons le contrôle de source dans le mix, les choses se compliquent.
Comme je suis un bâtard pas cher, je préférerais de beaucoup utiliser des services de contrôle de source gratuits tels que TFS dans le cloud ou GitHub. Cela me laisse avec une légère énigme:
Comment conserver mon corps intact lorsque mes clés d'API sont dans mon code et que mon code est disponible dans un référentiel public?
Je peux penser à un certain nombre de façons de gérer cela, mais aucune d’elles n’est aussi satisfaisante.
- Je pourrais supprimer toutes les informations privées du code et les rééditer après le déploiement. Ce serait une douleur sévère à mettre en œuvre (je ne détaillerai pas les nombreuses manières), et n'est pas une option.
- Je pourrais le chiffrer. Mais comme je dois le déchiffrer, n'importe qui avec la source pourrait comprendre comment le faire. Inutile.
- Je pourrais payer pour le contrôle de source privé. LOL j / k dépenser de l'argent? S'il vous plaît.
- Je pourrais utiliser les fonctionnalités du langage pour séparer les informations sensibles du reste de ma source et donc les garder du contrôle de code source. C’est ce que je suis en train de faire à présent, mais cela pourrait facilement être gâché en vérifiant par erreur le fichier secret.
Je suis vraiment à la recherche d'un moyen sûr de ne pas partager mes données privées avec le monde entier (sauf sur Snapchat), qui fonctionnera sans heurts pendant le développement, le débogage et le déploiement, et sera également infaillible. C'est complètement irréaliste. Alors, que puis-je faire de manière réaliste?
Détails techniques: VS2012, C # 4.5, le contrôle de source sera soit un service TF, soit GitHub. Nous utilisons actuellement une classe partielle pour scinder les clés sensibles dans un fichier .cs séparé qui ne sera pas ajouté au contrôle de source. Je pense que GitHub pourrait avoir l’avantage de pouvoir utiliser .gitignore pour s’assurer que les fichiers de classe partiels ne sont pas archivés, mais j’ai tout gâché. J'espère un "oh, problème commun, voici comment vous le faites" mais je pourrais devoir me contenter de "cela ne craint pas autant qu'il aurait pu",: /