Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Existe una forma segura de administrar las claves API?

Estoy utilizando una API dentro de mi aplicación. Actualmente administro la clave de la API desde una interfaz java

public interface APIContract { //The API KEY MUST NOT BE PUBLISH. It is possible to generate a new one for free from www.themoviedb.org //Remove before commit !!! String API_KEY = "abcdefghijklmnopqrstuvwxyz"; /... } 

Esto hace el trabajo. Puedo tener acceso a la llave usando APIContract.API_KEY , pero como usted puede ver en el comentario esto no es seguro si uso git y un repositorio público (no se supone para publicar esta llave).

Así que aquí está mi pregunta: ¿es posible mover esta llave en otro lugar al que puedo acceder fácilmente desde mi aplicación pero que no se va a comprometer?

Encontré este hilo que utiliza gradle para almacenar la clave, pero necesito confirmar el archivo build.gradle para que no haga el trabajo.

¿Alguien sabe cómo resolver este problema? No encontré problemas similares en stackoverflow, pero tal vez me perdí algo

EDIT Me encanta la idea de mover la clave fuera de cualquier código java, porque otras personas (tal vez no técnicos) pueden administrar fácilmente su propia clave. Estaba pensando en usar un archivo gradle como settings.gradle .

  • Android - excluyendo una clave api de github, dónde almacenar la clave api en código?
  • Gradle: Cómo publicar una biblioteca de Android en el repositorio local
  • Entrada de recursos ic_launcher ya definida
  • Acceso a datos relacionados con el proyecto desde el comando Gradle
  • Daga de referencia no resuelta 2 + kotlin + androide gradle
  • Dagger2 dependencia - Gradle
  • Android Build Tools 1.1.0 - Lint falla en el identificador de problema desconocido "ImproperProjectLevelStatement"
  • Comando gradle: crashlyticsUploadDistributionRelease con sabor
  • 3 Solutions collect form web for “¿Existe una forma segura de administrar las claves API?”

    Aquí hay otra manera:

    Coloque la clave API en un archivo accesible para la máquina de compilación / servidor, lo llamaremos:

     /usr/api_user/api_key1 

    Con contenidos:

     myApiKey = abcdefghijklmnopqrstuvwxyz 

    Ahora podrá acceder a él utilizando el objeto gradle 'BuildConfig'. Modifique su código para esto:

     public interface APIContract { //The API KEY MUST NOT BE PUBLISH. It is possible to generate a new one for free from www.themoviedb.org //Remove before commit !!! String API_KEY = BuildConfig.MY_API_KEY; /... } 

    A continuación, en su build.gradle, agregue algo como esto:

     buildConfigField "String", "MY_API_KEY", getMyApiKey("myApiKey") 

    Y también añadir esto:

     //return a MY API KEY from a properties file. def getMyApiKey(String property){ Properties properties = new Properties() properties.load(new FileInputStream("/usr/api_user/api_key1")) return "\"" + properties.getProperty(property) +"\"" } 

    Puede trasladar la ubicación del directorio de la API, como puede ver, para que no forme parte de su repositorio. Por supuesto, entonces tendrá dependencias del sistema de archivos para la compilación … que podría tener una configuración de lista en un entorno de CI / CD (tal vez una herramienta como Jenkins) para replicar los archivos de compilación a un repo privado, con fines de copia de seguridad.

    1. Guarde las claves de api en un archivo xml

    Ponga el archivo xml "api_keys.xml" en el directorio "res / values ​​/".

    Api_keys.xml

     <?xml version="1.0" encoding="utf-8"?> <resources> <string name="THE_MOVIE_DB_API_TOKEN">XXXXX</string> </resources> 

    Utilizar las claves api en el código java

     context.getString(R.string.THE_MOVIE_DB_API_TOKEN); 

    2. Guarde las claves de api con la ayuda de gradle y el archivo gradle.properties

    Ejemplo_0 Ejemplo_1

    Agregue la siguiente línea a [USER_HOME] /. Gradle / gradle.properties

    Para el sistema operativo Windows, ejemplo para el usuario de Denis:

     C:\Users\Denis\.gradle 

    Gradle.properties

     MyTheMovieDBApiToken="XXXXX" 

    Agregue el siguiente código al archivo build.gradle

    Construir un gradiente

     apply plugin: 'com.android.application' android { ... defaultConfig { ... } buildTypes { release { ... } } buildTypes.each { it.buildConfigField 'String', 'THE_MOVIE_DB_API_TOKEN', MyTheMovieDBApiToken } } 

    Utilizar las claves api en el código java

     BuildConfig.THE_MOVIE_DB_API_TOKEN) 

    3. Almacene las llaves del api con la ayuda de gradle y de la variable de la trayectoria del sistema

    Ejemplo_0

    Agregar nueva variable del sistema PATH THE_MOVIE_DB_API_TOKEN = "XXXXX" :

    Para el sistema operativo Windows:

    • sistema abierto
    • configuración avanzada del sistema
    • Variables de entorno
    • Añadir nuevas variables a las variables de usuario

    Agregue el siguiente código al archivo build.gradle

    Construir un gradiente

     apply plugin: 'com.android.application' android { ... defaultConfig { ... } buildTypes { release { ... } buildTypes.each { it.buildConfigField 'String', 'THE_MOVIE_DB_API_TOKEN', "$System.env.THE_MOVIE_DB_API_TOKEN" } } } 

    Utilizar las claves api en el código java

     BuildConfig.THE_MOVIE_DB_API_TOKEN) 

    Enlace a mi idea en github

    Puede agregar la clave al archivo gradle.properties o pasarla como un argumento

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.