Estoy trabajando en un sitio web que permitirá a los usuarios iniciar sesión con credenciales de OAuth de Twitter, Google, etc. Para hacer esto, tengo que registrarme con estos diversos proveedores y obtener una clave API súper secreta que tengo para proteger con promesas contra diversas partes del cuerpo. Si mi llave se engancha, la parte se arranca.
La clave API tiene que viajar con mi fuente, ya que se usa en tiempo de ejecución para realizar solicitudes de autenticación. En mi caso, la clave debe existir dentro de la aplicación en un archivo de configuración o dentro del propio código. Eso no es un problema cuando construyo y publico desde una sola máquina. Sin embargo, cuando agregamos el control de la fuente a la mezcla, las cosas se vuelven más complicadas.
Como soy un bastardo barato, preferiría usar servicios de control de fuente gratuitos como TFS en la nube o GitHub. Esto me deja con un ligero enigma:
¿Cómo puedo mantener mi cuerpo intacto cuando mis claves API están en mi código y mi código está disponible en un repositorio público?
Se me ocurren varias formas de manejar esto, pero ninguna de ellas es tan satisfactoria.
- Podría eliminar toda la información privada del código y volver a editarla después de la implementación. Implementar esto sería un dolor severo (no detallaré las muchas formas), y no es una opción.
- Podría encriptarlo. Pero como tengo que descifrarlo, cualquiera con la fuente podría descubrir cómo hacerlo. Inútil.
- Podría pagar por el control de fuentes privadas. LOL j / k gastar dinero? Por favor.
- Podría usar las funciones del lenguaje para segregar información confidencial del resto de mi fuente y, por lo tanto, mantenerla fuera del control de la fuente. Esto es lo que estoy haciendo ahora, pero podría arruinarse fácilmente al registrar erróneamente el archivo secreto.
Realmente estoy buscando una forma garantizada de garantizar que no comparta mis partes privadas con el mundo (excepto en Snapchat) que funcione sin problemas durante el desarrollo, la depuración y la implementación, y que también sea infalible. Esto es completamente poco realista. Entonces, ¿qué puedo hacer de manera realista?
Detalles técnicos: VS2012, C # 4.5, el control de origen será el servicio TF o GitHub. Actualmente utiliza una clase parcial para dividir las claves confidenciales en un archivo .cs separado que no se agregará al control de origen. Creo que GitHub puede tener la ventaja ya que .gitignore podría usarse para garantizar que el archivo de clase parcial no esté registrado, pero lo he estropeado antes. Espero un "oh, problema común, así es como lo haces", pero es posible que tenga que conformarme con "eso no apesta tanto como podría haber",: /