2009-12-31 21 views
41

Para un proyecto personalizado, desarrollo una aplicación de escritorio que requiere claves API de varios servicios web diferentes.Cómo abrir una aplicación que utiliza las claves de API

He estado revisando y preparando esta aplicación para que se convierta en código abierto y se encuentre con el problema de qué hacer con esas claves.

El problema es este: mi entendimiento es que estas claves API no deberían estar visibles para cualquiera que use la aplicación o vea/modifique el código fuente. Desde el fin del servicio web, estas claves API se utilizan para identificar aplicaciones que acceden a su API, y permiten/bloquean el uso según corresponda. En la mayoría de los TOS para recibir estas claves, en realidad se establece explícitamente que las claves no se deben compartir con el mundo.

Actualmente todas las llaves están codificados, pero por lo que estoy en un punto muerto en cuanto a cómo manejar la situación de las claves privadas en una aplicación de código abierto:

-Si las claves de permanecer codificada de manera, que Seré públicamente visible tan pronto como mi código fuente sea.

-no puedo realmente omitir el archivo fuente con las claves de la distribución del código, ya que entonces no se compilará. Esto resuelve técnicamente el problema, pero presenta un nuevo e inaceptable .

-Si presiono las teclas en un archivo .ini u otro archivo de configuración, y simplemente no incluyo ese archivo en mi repositorio de código público, todavía tendría que ser distribuido con el binario de mi aplicación para que el aplicación para que funcione, por lo que mis claves serían visibles en la distribución de la aplicación en lugar de la distribución de origen. No es una mejora. Cualquier gimnasia de encriptación que intenté utilizar en este archivo INI agregaría complejidad a cualquiera que intente modificar mi código.

Entonces, con respecto a mi base de código (actualmente bajo Mercurial para control de versiones), ¿cuál es la mejor manera de administrar todo para que el código pueda ser público, pero mis claves se mantienen privadas?

+0

¿Qué lenguaje de programación está utilizando? –

+0

En este caso estoy usando C# – callingshotgun

Respuesta

15

No sé qué idioma está utilizando, pero por ejemplo en C/C++ agregaría un archivo de inclusión con las claves de la API, y luego lo dejaría fuera del control de fuente, en su lugar agregaría un archivo falso con explícitamente falso claves de API. La mayoría de los idiomas tienen una u otra forma de incluir archivos.

8

Su aplicación debe usar un archivo de configuración. Este archivo de configuración se carga en tiempo de ejecución y no debería afectar a la compilación. El permite a los usuarios descargar un archivo binario y seguir usando su propia clave api.

Como dice Kornel, puede incluir un archivo de configuración de ejemplo con una clave de API falsa, en su control de origen.

Otra opción, puede hablar con las personas que dirigen los servicios web y solicitar una de estas dos cosas.

  1. Una clave temporal, que solo funciona para funcionalidad limitada. Eso permitiría a los usuarios ver la funcionalidad básica de su aplicación, pero algunas personas nunca actualizarían la clave y solo usarían las funciones básicas.

  2. Hable con los servicios web para ver si le darán una clave API especial para su aplicación. La versión de código abierto requeriría que los usuarios ingresen la suya propia. Pero tu binario podría usar uno estándar.

La idea de utilizar una configuración para las claves de las API, no es nueva ni desconocida. Los servicios de Bit.ly lo hacen. Y todas las aplicaciones de código abierto que veo que proporcionan uso con Bit.ly piden su nombre de usuario y clave api antes de que pueda usarlo.

¿Esto no es diferente?

+0

El problema con el uso de un archivo de configuración es que realmente estoy distribuyendo el programa en su forma compilada y utilizable en otro lugar. Si tuviera que ir a la ruta del archivo de configuración, tendría que distribuir el programa con un archivo de configuración lleno con las claves de la API. – callingshotgun

+6

Para ser sincero, nada impide que un pirata informático inteligente arranque sus claves API incluso desde el formulario compilado. –

+0

¿De qué sistema operativo estamos hablando? Todos los sistemas modernos tienen un sistema de instalación y todos manejan archivos de configuración de una forma u otra. No tiene que enviarlo con claves API viables. He visto varios proyectos que no se ejecutarán hasta que la clave sea válida. La aplicación solo verifica que la clave funciona al inicio. Si desea enviar una versión demo de algún tipo, puede tratar de proporcionar una versión temporal. He actualizado mi respuesta con este pensamiento –

Cuestiones relacionadas