Dois-je ajouter le google-services.json (de Firebase) à mon référentiel?

94

Je viens de m'inscrire à Firebase et j'ai créé un nouveau projet. Firebase m'a demandé mon domaine d'application et une clé de débogage SHA1. J'ai entré ces détails et cela a généré un fichier google-services.json que je dois ajouter à la racine de mon module d'application.

Ma question est de savoir si ce fichier .json doit être ajouté à un référentiel public (open source). Est-ce quelque chose qui devrait être secret, comme une clé API?

hitraj47
la source

Réponses:

90

Un google-services.jsonfichier est, du document Firebase :

Firebase gère tous vos paramètres d'API et vos informations d'identification via un seul fichier de configuration.
Le fichier est nommé google-services.jsonsur Android et GoogleService-Info.plistsur iOS.

Il semble logique de l'ajouter à un .gitignoreet de ne pas l'inclure dans un repo public.
Cela a été discuté dans le numéro 26 , avec plus de détails sur ce que google-services.jsoncontient.

Un projet comme googlesamples/google-servicesne l' avoir dans son.gitignore par exemple.
Bien que, comme commenté par stepheaw , ce fil ne mentionne

Pour une bibliothèque ou un exemple open source, nous n'incluons pas le fichier JSON car l'intention est que les utilisateurs insèrent le leur pour pointer le code vers leur propre backend.
C'est pourquoi vous ne verrez pas de fichiers JSON dans la plupart de nos dépôts Firebase sur GitHub.

Si "l'URL de la base de données, la clé d'API Android et le compartiment de stockage" ne sont pas secrets pour vous, vous pouvez envisager d'ajouter le fichier à votre dépôt.
Comme mentionné dans " google-services.json est-il à l'abri des pirates? ", Ce n'est pas si simple.

baueric demande dans les commentaires :

Dans ce post, il dit:

Le fichier JSON ne contient aucune information super-sensible (comme une clé d'API de serveur)

Mais l' google-services.jsonentrée est appelée api_key.
Est-ce une clé API différente d'un " server api key"?

Willie Chalmers III indique " Est-ce que google-services.json est à l'abri des pirates? ", Et ajoute:

Oui, cette clé d'API n'est pas une clé d'API de serveur qui ne devrait jamais être publique, donc c'est parfait si votre google-services.jsonest visible par d'autres.

Dans tous les cas, vous devez toujours restreindre la manière dont votre clé API client peut être utilisée dans la console Google Cloud.

VonC
la source
10
Ce n'est pas vraiment correct; un ingénieur Firebase a déclaré qu'il était acceptable de vérifier le contrôle de source. La réponse de @ Yaron tient.
Willie Chalmers III
2
@WillieChalmersIII OK. J'ai modifié la réponse en conséquence.
VonC
@WillieChalmersIII Dans ce post, il dit "Le fichier JSON ne contient aucune information super-sensible (comme une clé API de serveur)" mais google-services.jsona une entrée appelée api_key. Est-ce une clé API différente d'une «clé API serveur»?
baueric le
1
@baueric Voir cette réponse pour plus d'informations. Oui, cette clé d'API n'est pas une clé d'API de serveur qui ne devrait jamais être publique, donc c'est parfait si votre google-services.jsonest visible par d'autres. Dans tous les cas, vous devez toujours restreindre la manière dont votre clé API client peut être utilisée dans la console Google Cloud.
Willie Chalmers III le
36

À partir de cette discussion, il semble que vous puissiez l'ajouter à un dépôt public. Son contenu se retrouve de toute façon dans l'APK et est probablement facile à extraire.

Yaron
la source
1
Je suis d'accord et je travaille sur cette question en ce moment. Existe-t-il un moyen de chiffrer les clés de ce fichier à partir de quelqu'un décompilant l'APK?
stepheaw
13
S'il est certainement vrai que les clés API peuvent facilement être extraites d'un apk, la question était de savoir s'il google-services.jsonfallait valider le contrôle de code source dans un dépôt public open source . Et dans la grande majorité des cas, la réponse est définitivement NON - à moins que le propriétaire du repo ne souhaite que le monde entier utilise le quota d'API de son compte Google par défaut. La réponse de @ VonC tient.
friederbluemle
2
hitraj47 a demandé comment l'ajouter à un référentiel public . Cette discussion ne mentionne pas les référentiels publics, et ils semblent discuter d'un référentiel privé.
Eugene