Ваше приложение содержит открытые ключи API Google Cloud Platform (GCP). Подробнее см. В этой статье Справочного центра Google. - PullRequest
6 голосов
/ 04 июля 2019

Мой ключ ограничен использованием имени пакета и SHA1, но в магазине Google Play это предупреждение отображается.

Любая идея, почему она так выглядит. Я определил свой ключ API в файле build.gradle и использовал его оттуда.

Ответы [ 4 ]

0 голосов
/ 22 июля 2019

В соответствии с рекомендацией Google, необходимо ввести такие ограничения, как указание имени пакета, а также ключа SHA-1.

Это было объяснено здесь: https://cloud.google.com/docs/authentication/api-keys#securing_an_api_key

Теперь проблема в том, что независимо от того, что вы делаете, ваш ключ API окажется в базе кода, т.е. если вы укажете его вне базы кода (через файл свойств), но передадите его через поле BuildConfig во время фазы сборки ( весь ключ виден кому-то, кто декомпилирует ваш код, поскольку он теперь является частью файла класса BuildConfig), или вы разбили его и сцепили в кодовой базе (разделенные ключи все еще видны, и любой может объединить их, увидев использование для получения окончательного ключа из распакованного apk).

Версия с разделенным ключом избавит от предупреждения в консоли воспроизведения, но ключ все еще открыт.

Мое предлагаемое решение, таким образом, состояло бы в том, чтобы закодировать ваш ключ API и передать его вокруг вашей кодовой базы. Непосредственно перед использованием вы декодируете его обратно.

Очень простой пример может быть:

Пожалуйста, используйте лучший алгоритм кодирования, а не это, это только для демонстрационных целей. Здесь мы используем кодировку Base64.

import android.util.Base64

fun main() {
   // API Key = "123456ABC"
   val myEncodedApiKey = "MTIzNDU2QUJD" // Should be passed via BuildConfig
   val decodedApiKey = Base64.decode(myEncodedApiKey, Base64.DEFAULT)

   // Now use `decodedApiKey` in your codebase.
   val decodedApiKeyString = String(decodedApiKey)
}

Почему это лучше?

  1. Ваш ключ не такой, как в вашем проекте GCP.
  2. Консоль воспроизведения, когда она сканирует вашу кодовую базу, не может сопоставить ее с ключами API вашего проекта GCP. Таким образом, никаких предупреждений.

Обновление (пояснение по использованию файла google-services.json для ключа API):

Решение использовать ключ API из google-services.json не совсем корректно. google-services.json генерируется как правило, если вы подключаете свою учетную запись в firebase. Определенный там ключ API имеет другую модель ограничения. Тот, который вы определили в своем проекте GCP, отличается, позволяя передавать имя пакета и ключ SHA-1, а также ограничивается определенным видом доступа API, таким как доступ только на Youtube. Таким образом, если использовать ключи API из google-services.json, то вы практически не используете ограничения, установленные в вашей учетной записи GCP. Аккаунты GCP не генерируют файл google-services.json.

Для краткого обзора приведу официальный документ от Google по настройке API-интерфейса Youtube, который использует ключи API, определенные в проекте GCP, и в документах он упоминает о непосредственном введении ключей в код. (что в любом случае неправильно, так как оно разоблачено, но это Google для вас).

https://developers.google.com/youtube/android/player/setup

Нигде в любых документах не упоминается использование файла google-services.json для получения ключей API.

0 голосов
/ 10 июля 2019

Вы можете удалить это предупреждение, разбив ваши ключи на 4 части, подобные этой

public static final String API_KEY_PART_1 = "Asdsdfdd-";

public static final String API_KEY_PART_2 = "dfsFdsdsFdd";

public static final String API_KEY_PART_3 = "Pgdhs_SfSfs";

public static final String API_KEY_PART_4 = "fdfDDSD";

, и использовать его для объединения строк

.attest(nonce.getBytes(), Constants.API_KEY_PART_1+Constants.API_KEY_PART_2+Constants.API_KEY_PART_3+Constants.API_KEY_PART_4)

ПРИМЕЧАНИЕ. Убедитесь, что вы ограничиваетеВаш ключ API только для доступа к приложениям.в противном случае, если кто-то декомпилирует ваш apk и использует ваш ключ api, это может увеличить ваш счет.

Ограничьте ключ вашего API с помощью SHA и имени пакета нажмите здесь для получения подробной информации

0 голосов
/ 11 июля 2019

Извините, немного поздно, так как мой предыдущий ответ просто обошел предупреждение после некоторого исследования, я нашел соответствующее исправление для этой проблемы

выможно получить ключ API из файла Google JSON .Файл google-services.json анализируется, и его значения добавляются в XML-файл, к которому у вас есть доступ ко всем элементам json в качестве ресурсов Android в вашем коде Java , нажмите здесь для получения подробной информации

Ниже приведен пример доступа к ключу API Google из файла JSON:

activity.getResources().getString(R.string.google_api_key);

0 голосов
/ 04 июля 2019

Вы не должны определять ключ API напрямую в файле build.gradle.В качестве альтернативы можно загрузить свой ключ API Firebase на свой собственный сервер (вы можете использовать крошечные веб-базы данных или MY sql).и при необходимости вызовите ключ API с вашего сервера и используйте его.Вот некоторая хорошая практика, которой следует следовать в этом случае.Для получения дополнительной информации см. this

  • Не вставляйте ключи API непосредственно в код.Ключи API, встроенные в код, могут быть случайно открыты для общественности.Например, вы можете забыть удалить ключи из кода, которым вы делитесь.Вместо того чтобы встраивать ключи API в свои приложения, храните их в переменных среды или в файлах вне дерева исходных текстов приложения.

  • Не храните ключи API в файлах внутри дерева исходных текстов приложения.Если вы храните ключи API в файлах, храните файлы вне дерева исходных текстов приложения, чтобы гарантировать, что ваши ключи не попадут в систему управления исходным кодом.Это особенно важно, если вы используете общедоступную систему управления исходным кодом, такую ​​как GitHub.

  • Настройка ограничений для приложений и ключей API.Добавляя ограничения, вы можете уменьшить влияние скомпрометированного ключа API.

  • Удалите ненужные ключи API, чтобы минимизировать подверженность атакам.

  • ВосстановитьВаши ключи API периодически.Вы можете восстановить ключи API со страницы Credentials, щелкнув Восстановить ключ для каждого ключа.Затем обновите свои приложения, чтобы использовать вновь созданные ключи.Ваши старые ключи будут продолжать работать в течение 24 часов после того, как вы создадите ключи для замены.

  • Просмотрите код перед его публичным выпуском.Убедитесь, что ваш код не содержит ключей API или любой другой частной информации, прежде чем сделать его общедоступным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...