Devo adicionar google-services.json (do Firebase) ao meu repositório?

93

Acabei de me inscrever no Firebase e criei um novo projeto. O Firebase me pediu o domínio do meu aplicativo e uma chave de depuração SHA1. Inseri esses detalhes e ele gerou um arquivo google-services.json para eu adicionar na raiz do módulo do meu app.

Minha pergunta é: este arquivo .json deve ser adicionado a um repositório público (código aberto). É algo que deveria ser secreto, como uma chave de API?

hitraj47
fonte

Respostas:

90

Um google-services.jsonarquivo é, do documento do Firebase :

O Firebase gerencia todas as configurações e credenciais da API por meio de um único arquivo de configuração.
O arquivo é nomeado google-services.jsonno Android e GoogleService-Info.plistno iOS.

Parece fazer sentido adicioná-lo a um .gitignoree não incluí-lo em um repo público.
Isso foi discutido na edição 26 , com mais detalhes sobre o que google-services.jsoncontém.

Um projeto como googlesamples/google-serviceso tem em seu,.gitignore por exemplo.
Embora, como comentado por stepheaw , este tópico mencione

Para uma biblioteca ou amostra de código aberto, não incluímos o arquivo JSON porque a intenção é que os usuários insiram o seu para apontar o código para seu próprio back-end.
É por isso que você não verá arquivos JSON na maioria de nossos repositórios Firebase no GitHub.

Se o "URL do banco de dados, chave de API do Android e intervalo de armazenamento" não forem secretos para você, considere adicionar o arquivo ao seu repo.
Conforme mencionado em " O google-services.json está protegido contra hackers? ", Isso não é tão simples assim.

baueric pergunta nos comentários :

Nessa postagem, ele diz:

O arquivo JSON não contém nenhuma informação supersensível (como uma chave de API do servidor)

Mas o google-services.jsontem uma entrada chamada api_key.
Essa é uma chave de API diferente de " server api key"?

Willie Chalmers III aponta para " Is google-services.json seguro contra hackers? " E acrescenta:

Sim, essa chave de API não é uma chave de API do servidor que nunca deve ser pública, então está tudo bem se você google-services.jsonestiver visível para outras pessoas.

Em qualquer caso, você ainda deve restringir como sua chave de API do cliente pode ser usada no console do Google Cloud.

VonC
fonte
10
Isso não é realmente correto; um engenheiro do Firebase disse que não há problema em verificar o controle de origem. A resposta de @Yaron permanece.
Willie Chalmers III
2
@WillieChalmersIII OK. Eu alterei a resposta em conformidade.
VonC
@WillieChalmersIII Nesse post ele diz "O arquivo JSON não contém nenhuma informação supersensível (como uma chave de API do servidor)" mas google-services.jsontem uma entrada chamada api_key. É uma chave de API diferente de uma "chave de API de servidor"?
baueric
1
@baueric Veja esta resposta para mais informações. Sim, essa chave de API não é uma chave de API do servidor que nunca deve ser pública, então está tudo bem se você google-services.jsonestiver visível para outras pessoas. Em qualquer caso, você ainda deve restringir como sua chave de API do cliente pode ser usada no console do Google Cloud.
Willie Chalmers III
36

A partir dessa discussão, parece que você pode adicioná-lo a um repositório público. Seu conteúdo acaba no APK de qualquer maneira e provavelmente é fácil de extrair.

Yaron
fonte
1
Eu concordo e estou trabalhando nesse problema agora. Existe uma maneira de criptografar as chaves nesse arquivo de alguém descompilar o APK?
stepheaw
13
Embora seja definitivamente verdade que as chaves de API podem ser facilmente extraídas de um apk, a questão era se google-services.jsondeveria ser comprometido com o controle de origem em um repositório de código aberto público . E na grande maioria dos casos, a resposta é definitivamente NÃO - a menos que o proprietário do repo queira que o mundo inteiro use sua cota de API da conta do Google por padrão. A resposta de @VonC permanece.
friederbluemle
2
hitraj47 perguntou sobre adicioná-lo a um repositório público . Essa discussão não menciona repositórios públicos, e eles parecem estar discutindo um repositório privado.
Eugene