Estoy trabajando en un sitio web que permitirá a los usuarios iniciar sesión con las credenciales de OAuth de usuarios como Twitter, Google, etc. Para hacer esto, debo registrarme con estos proveedores y obtener una clave API súper secreta que tengo que proteger con prendas contra varias partes del cuerpo. Si mi llave se anula, la pieza se jala.
La clave API debe 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 compilo y publico desde una sola máquina. Sin embargo, cuando lanzamos el control de la fuente en la mezcla, las cosas se complican.
Como soy un bastardo barato, prefiero usar servicios de control de código 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 de API están en mi código, y mi código está disponible en un repositorio público?
Puedo pensar en varias maneras de manejar esto, pero ninguna de ellas es tan satisfactoria.
- Podría eliminar toda la información privada del código y editarla nuevamente después de la implementación. Esto sería un dolor severo de implementar (no detallaré las muchas maneras) y no es una opción.
- podría cifrarlo. Pero como tengo que descifrarlo, cualquiera con la fuente podría descubrir cómo hacerlo. Sin sentido.
- Podría pagar el control de la fuente privada. LOL j / k gastar dinero? Por favor.
- Podría usar funciones de lenguaje para separar la 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 se podría arruinar fácilmente al verificar el archivo secreto.
Realmente estoy buscando una forma garantizada para garantizar que no comparto mis secretos con el mundo (excepto en Snapchat) que funcionará sin problemas a través del desarrollo, la depuración y la implementación, y también seré infalible. Esto es completamente irrealista. Entonces, ¿qué puedo hacer de manera realista?
Detalles técnicos: VS2012, C # 4.5, el control de la fuente será el servicio de TF o GitHub. Actualmente, se usa 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 asegurarse de que el archivo de clase parcial no se haya registrado, pero lo he arruinado 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",: /