Estou trabalhando em um site que permitirá que os usuários efetuem login usando credenciais OAuth de sites como o Twitter, Google etc. Para fazer isso, preciso me registrar com esses vários provedores e obter uma chave API secreta que possuo para proteger com promessas contra várias partes do corpo. Se minha chave for arrancada, a parte será puxada.
A chave da API precisa viajar com a minha fonte, pois é usada em tempo de execução para executar solicitações de autenticação. No meu caso, a chave deve existir no aplicativo em um arquivo de configuração ou no próprio código. Isso não é um problema quando eu construo e publico a partir de uma única máquina. No entanto, quando colocamos o controle de origem na mistura, as coisas ficam mais complicadas.
Como sou um bastardo barato, prefiro usar serviços de controle de fonte gratuitos, como o TFS na nuvem ou o GitHub. Isso me deixa com um pequeno enigma:
Como posso manter meu corpo intacto quando minhas chaves de API estão no meu código e meu código está disponível em um repositório público?
Posso pensar em várias maneiras de lidar com isso, mas nenhuma delas é tão satisfatória.
- Eu poderia remover todas as informações particulares do código e editá-las novamente após a implantação. Isso seria muito difícil de implementar (não detalharei as várias maneiras) e não é uma opção.
- Eu poderia criptografá-lo. Mas como eu tenho que decifrá-lo, qualquer pessoa com a fonte pode descobrir como fazê-lo. Sem sentido.
- Eu poderia pagar pelo controle de fontes privadas. LOL j / k gasta dinheiro? Por favor.
- Eu poderia usar os recursos de idioma para separar informações confidenciais do restante da minha fonte e, portanto, mantê-las fora do controle da fonte. É isso que estou fazendo agora, mas pode ser facilmente estragado ao checar por engano o arquivo secreto.
Estou realmente procurando uma maneira garantida de garantir que não compartilhe meus interesses com o mundo (exceto no snapchat), que funcionará sem problemas durante o desenvolvimento, a depuração e a implantação, além de ser à prova de falhas. Isso é completamente irreal. Então, o que realisticamente eu posso fazer?
Detalhes técnicos: VS2012, C # 4.5, o controle de origem será serviço TF ou GitHub. Atualmente, está usando uma classe parcial para dividir as chaves confidenciais em um arquivo .cs separado que não será adicionado ao controle de origem. Acho que o GitHub pode ter a vantagem, pois o .gitignore pode ser usado para garantir que o arquivo de classe parcial não seja verificado, mas eu estraguei tudo isso antes. Estou esperando por um "oh, problema comum, é assim que você faz", mas talvez eu tenha que me contentar com "que não é tão ruim quanto poderia",: /