Java, clé secrète ajouté uniquement à la compilation

a marqué ce sujet comme résolu.

Bonjour,

J’aurais aimé savoir par qu’elle moyen il m’étais possible d’insérer des clés secrète dans mon code Java à sa compilation, afin de ne pas devoir les inclures dans le code source pour qu’il puisse rester Open-source.

Pour expliquer le contexte, c’est pour une authentification ZdS, donc pour insérer mon client_id et client_secret sans que tout le monde puisse le récupérer.

J’ai pensé éventuellement à passer par un serveur personnel intermédiaire, qui lui ferais la requête avec le client_id et le client_secret. Mais j’y vois deux inconvénient:

  • Je doute que les gens soit très fan de savoir que leur identifiant passe par un serveur intermédiaire
  • Les client_id et client_secret n’aurait plus aucun intérêt puisque n’importe qui pourrait utiliser ce serveur.

Qu’auriez-vous donc à me conseiller ?
Je pense essentiellement à @firm1 qui a utilisé cette méthode dans Zest-Friend.

Edit: Et contrairement à Zest-Friend, j’aimerais éviter de passer par Gradle (J’utilise Maven dans mon projet).

+0 -0

Pourquoi ne pas proposer un fichier de config par défaut et un fichier de config réel qui lui n’est pas versionné dans lequel tu mes toutes tes variables privée (clé, mot de passe bdd, …) ?

Bon après je dis sa par rapport à Symfony qui fait comme sa vu que les fichiers ne sont pas "compilé"… mais peut-être y a t’il moyen de transposer l’idée.

+1 -0

Qu’auriez-vous donc à me conseiller ?
Je pense essentiellement à @firm1 qui a utilisé cette méthode dans Zest-Friend.

Edit: Et contrairement à Zest-Friend, j’aimerais éviter de passer par Gradle (J’utilise Maven dans mon projet).

WinXaito

Le faire à la compilation, signifie qu’il faut le faire par ton compilateur et/ou ta mécanique de compilation.

Dans ton cas, ta mécanique de compilation (ou build) c’est maven. Donc c’est à maven d’injecter au moment de la compilation tes client_id et client_secret dans ton programme. Mais comme le dit La source, il ne faudrait donc pas que ces clés soit versionnés (et donc publié dans un quelconque repo git).

Avec maven, la technique est plus ou moins similaire à celle qu’on utilise pour Gradle. C’est à dire que tu utilise les variables d’environnement.

Le principe :

  1. Tu prévois de compiler ton projet avec une commande du style mvn install -DclientId=tonClientId -DclientSecret=tonClientSecret
  2. Dans ton programme Java tu vérifies si tu as des variables d’environnement dans la JVM du nom de clientId et clientSecret. Si oui, tu les utilise dans ton programme, sinon tu quitte le programme en disant qu’il faut compiler le code avec ces deux variables

L’intérêt de cette technique est que la compilation du mode est automatisable dans un CI comme travis en enregistrant tes variables dans travis en mode secure, et en disant à travis de lancer par exemple mvn install -DclientId=$CLIENTID -DclientSecret=$CLIENTSECRET pour compiler ton projet. ça t’évitera de de partager tes credentials et obligera celui qui veut compiler ton projet de passer ses credentials pour ne pas avoir de surprise.

Tu as aussi la technique a base de fichier properties, mais te préfère ne pas trop disperser l’exemplication si tu n’es pas trop habitué des mécaniques de build

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte