Я працюю над веб-сайтом, який дозволить користувачам входити в систему за допомогою облікових даних OAuth, подібних до Twitter, Google тощо. Для цього мені потрібно зареєструватися у цих різних провайдерів і отримати супер секретний ключ API, який у мене є захищати заставою від різних частин тіла. Якщо мій ключ зірветься, частина розірветься.
Ключ API повинен подорожувати з моїм джерелом, оскільки він використовується під час виконання для виконання запитів аутентифікації. У моєму випадку ключ повинен існувати в програмі у файлі конфігурації або в самому коді. Це не проблема, коли я створюю і публікую з однієї машини. Однак, коли ми кидаємо контроль джерел у суміш, справи ускладнюються.
Оскільки я дешевий ублюдок, я вважаю за краще скористатися послугами безкоштовного контролю джерел, такими як TFS у хмарі або GitHub. Це залишає у мене невелику головоломку:
Як я можу зберегти своє тіло недоторканим, коли в моєму коді є ключі API, а мій код доступний у загальнодоступному сховищі?
Я можу придумати кілька способів вирішити це, але жоден із них не задовольняє.
- Я міг видалити всю приватну інформацію з коду та відредагувати її назад після розгортання. Це було б дуже сильним болем (я не буду деталізувати багато способів), і це не варіант.
- Я міг би це зашифрувати. Але оскільки я маю це розшифрувати, кожен із джерелом міг зрозуміти, як це зробити. Безглуздо.
- Я міг би заплатити за контроль над приватними джерелами. LOL j / k витрачати гроші? Будь ласка.
- Я можу використовувати мовні функції для відокремлення чутливої інформації від решти мого джерела і тому зберігати її від контролю джерела. Це я зараз роблю, але це можна було легко викрутити, помилково перевіривши в секретному файлі.
Я дійсно шукаю гарантований спосіб переконатися, що я не поділяюсь з приватними особами зі своїм світом (за винятком Snapchat), який буде працювати безперебійно через розробку, налагодження та розгортання, а також бути надійним. Це абсолютно нереально. То що реально я можу зробити?
Технічні деталі: VS2012, C # 4.5, управління джерелом буде або TF-послугою, або GitHub. В даний час використовується частковий клас для розділення чутливих клавіш на окремий файл .cs, який не буде додано до керування джерелом. Я думаю, що GitHub може мати перевагу, оскільки .gitignore може бути використаний, щоб переконатися, що файл часткового класу не зареєстрований, але я це вже накрутив. Я сподіваюся на "о, поширене питання, ось як ви це робите", але, можливо, мені доведеться вирішити "те, що не смокче стільки, скільки може",: /