Ключ API – это уникальная строка, которая используется для маршрутизации запросов к вашему проекту Firebase при взаимодействии со службами Firebase и Google. На этой странице описана основная информация о ключах API, а также рекомендации по использованию ключей API и управлению ими с приложениями Firebase.
Общая информация о ключах API и Firebase
Ключи API для Firebase отличаются от типичных ключей API.
В отличие от обычного использования ключей API, ключи API для сервисов Firebase не используются для управления доступом к внутренним ресурсам ; это можно сделать только с помощью правил безопасности Firebase (чтобы контролировать, какие пользователи могут получать доступ к ресурсам) и проверки приложений (чтобы контролировать, какие приложения могут получать доступ к ресурсам).
Обычно вам необходимо тщательно охранять ключи API (например, используя службу хранилища или устанавливая ключи как переменные среды); однако ключи API для сервисов Firebase можно включать в код или зарегистрированные файлы конфигурации.
Хотя ключи API для сервисов Firebase безопасно включать в код, есть несколько конкретных случаев , когда вам следует установить ограничения для вашего ключа API; например, если вы используете Firebase ML, аутентификацию Firebase с методом входа по электронной почте и паролю или платный Google Cloud API. Подробнее об этих случаях читайте далее на этой странице.
Создание ключей API
Проект Firebase может иметь множество ключей API, но каждый ключ API может быть связан только с одним проектом Firebase.
Firebase автоматически создает ключи API для вашего проекта, когда вы выполняете любое из следующих действий:
- Создать проект Firebase >
Browser key
создан автоматически. - Создайте приложение Firebase Apple >
iOS key
создается автоматически - Создание приложения Firebase для Android >
Android key
создается автоматически
Вы также можете создавать свои собственные ключи API в Google Cloud Console , например, для разработки или отладки . Узнайте больше о том, когда это может быть рекомендовано, далее на этой странице.
Поиск ключей API
Вы можете просматривать и управлять всеми ключами API вашего проекта на панели API и сервисы > Учетные данные в Google Cloud Console.
Вы также можете узнать, какой ключ API автоматически сопоставляется с приложением Firebase, в следующих местах. По умолчанию все приложения Firebase вашего проекта для одной и той же платформы (Apple, Android или Web) будут использовать один и тот же ключ API.
Приложения Firebase Apple . Найдите автоматически сопоставленный ключ API приложения в файле конфигурации Firebase,
, в полеGoogleService-Info.plist API_KEY
.Приложения Firebase для Android . Найдите автоматически сопоставленный ключ API приложения в файле конфигурации Firebase,
, в полеgoogle-services.json current_key
.Веб-приложения Firebase — найдите автоматически сопоставленный ключ API приложения в объекте конфигурации Firebase в поле
apiKey
.
Использование ключа API
Ключи API используются для идентификации вашего проекта Firebase при взаимодействии со службами Firebase/Google. В частности, они используются для связывания запросов API с вашим проектом для получения квот и выставления счетов. Они также полезны для доступа к общедоступным данным.
Например, вы можете явно использовать ключ API, передав его значение в вызов REST API в качестве параметра запроса. В этом примере показано, как можно сделать запрос к API сокращения ссылок динамических ссылок :
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Когда ваше приложение выполняет вызов API Firebase, оно автоматически ищет в файле/объекте конфигурации Firebase ключ API вашего проекта. Однако вы можете установить ключи API, используя другой механизм, включая переменные среды.
Применить ограничения к ключам API (рекомендуется)
Хотя нет необходимости рассматривать ключ API для сервисов Firebase как секрет, есть некоторые конкретные случаи (см. ниже), в которых вы можете принять дополнительные меры для защиты вашего проекта от неправильного использования ключа API.
Уменьшите квоту, если вы используете аутентификацию на основе пароля.
Если вы используете аутентификацию Firebase на основе пароля и кто-то заполучил ваш ключ API, он не сможет получить доступ к какой-либо базе данных вашего проекта Firebase или данным облачного хранилища , если эти данные защищены правилами безопасности Firebase . Однако они могут использовать ваш ключ API для доступа к конечным точкам аутентификации Firebase и отправлять запросы аутентификации в отношении вашего проекта.
Чтобы снизить вероятность того, что кто-то может неправильно использовать ключ API для попытки атаки методом перебора, вы можете ужесточить квоту по умолчанию для конечных identitytoolkit.googleapis.com
, чтобы она отражала обычные ожидания трафика вашего приложения. Имейте в виду, что если вы ужесточите эту квоту и ваше приложение внезапно привлечет пользователей, у вас могут возникнуть ошибки входа в систему, пока вы не увеличите квоту. Вы можете изменить квоты API вашего проекта в Google Cloud Console .
Используйте отдельные ограниченные ключи API для определенных типов API.
Хотя ключи API, используемые для сервисов Firebase, обычно не следует рассматривать как секретные, вам следует принять некоторые дополнительные меры предосторожности с ключами API, используемыми для предоставления доступа к API Google Cloud, которые вы включили вручную.
Если вы используете Google Cloud API (на любой платформе), который не включается автоматически Firebase (то есть вы включили его самостоятельно), вам следует рассмотреть возможность создания отдельных ключей API с ограниченным доступом для использования с этими API. Это особенно важно, если API предназначен для платного сервиса Google Cloud.
Например, если вы используете API Cloud Vision Firebase ML на iOS, вам следует создать отдельные ключи API , которые вы будете использовать только для доступа к API Cloud Vision.
Используя отдельные ключи API с ограниченным доступом для API, отличных от Firebase, вы можете при необходимости ротировать или заменять ключи и добавлять дополнительные ограничения к ключам API , не прерывая использование сервисов Firebase.
В этих инструкциях описывается, как создать отдельный ограниченный ключ API для поддельного API под названием Super Service API
.
Шаг 1. Настройте существующие ключи API, чтобы запретить доступ к Super Service API
Откройте страницу учетных данных Google Cloud Console. При появлении запроса выберите свой проект.
Для каждого существующего ключа API в списке откройте режим редактирования.
В разделе «Ограничения API » выберите «Ограничить ключ» , затем добавьте в список все API, к которым вы хотите, чтобы ключ API имел доступ. Обязательно не указывайте API, для которого вы создаете отдельный ключ API (в этом примере
Super Service API
).Когда вы настраиваете ограничения API ключа API, вы явно объявляете API, к которым ключ имеет доступ. По умолчанию, если в разделе «Ограничения API» выбран параметр «Не ограничивать ключ» , ключ API можно использовать для доступа к любому API, включенному для проекта.
Теперь ваши существующие ключи API не будут предоставлять доступ к Super Service API
, но каждый ключ будет продолжать работать для любых API, которые вы добавили в список ограничений API .
Шаг 2. Создайте и используйте новый ключ API для доступа к Super Service API
Вернитесь на страницу учетных данных . Убедитесь, что ваш проект Firebase все еще выбран.
Нажмите Создать учетные данные > Ключ API . Запишите новый ключ API и нажмите «Ограничить ключ» .
В разделе «Ограничения API » выберите «Ограничить ключ» , затем добавьте в список только
Super Service API
.Этот новый ключ API предоставляет доступ только к
Super Service API
.Настройте свое приложение и службы для использования нового ключа API.
Используйте ключи API для конкретной среды (рекомендуется)
Если вы настраиваете разные проекты Firebase для разных сред, например для промежуточной и рабочей среды, важно, чтобы каждый экземпляр приложения взаимодействовал со своим соответствующим проектом Firebase. Например, ваш экземпляр промежуточного приложения никогда не должен взаимодействовать с вашим производственным проектом Firebase. Это также означает, что ваше промежуточное приложение должно использовать ключи API, связанные с вашим промежуточным проектом Firebase.
Чтобы уменьшить проблемы с продвижением изменений кода от разработки к промежуточной стадии и к производству, вместо включения ключей API в сам код либо установите их как переменные среды, либо включите в файл конфигурации.
Обратите внимание: если вы используете пакет локального эмулятора Firebase для разработки вместе с Firebase ML, вам необходимо создать и использовать ключ API только для отладки. Инструкции по созданию такого ключа можно найти в документации Firebase ML .
Часто задаваемые вопросы
Вы можете использовать любой из следующих вариантов, чтобы определить, какой ключ API связан с вашим приложением Firebase:
Консоль Firebase
Перейдите в Настройки проекта и прокрутите вниз до карточки «Ваши приложения» .
Выберите интересующее приложение.
Получите файл/объект конфигурации Firebase для интересующего приложения, а затем найдите его ключ API:
Apple : загрузите
GoogleService-Info.plist
и найдите полеAPI_KEY
Android : загрузите
google-services.json
, найдите конфигурацию интересующего приложения (найдите имя его пакета), а затем найдите полеcurrent_key
Интернет : выберите параметр «Конфигурация» , а затем найдите поле
apiKey
.
Интерфейс командной строки Firebase
Получите файл/объект конфигурации Firebase для интересующего приложения, выполнив следующую команду:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (одна из):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : уникальный идентификатор, назначенный Firebase для вашего приложения Firebase ( найдите свой идентификатор приложения ).
- PLATFORM (одна из):
В распечатанной конфигурации Firebase приложения найдите его ключ API:
Apple : найдите поле
API_KEY
Android : найдите конфигурацию интересующего приложения (найдите имя его пакета), а затем найдите поле
current_key
.Веб : найдите поле
apiKey
.
ОТДЫХ API
Получите
apiKeyId
(UID) ключа API, вызвав соответствующую конечную точку интересующего приложения, а затем передав значениеapiKeyId
на следующий шаг.- Apple : позвоните в
projects.iosApps.get
- Android : вызовите
projects.androidApps.get
- Интернет : вызовите
projects.webApps.get
- Apple : позвоните в
Получите строку ключа API, вызвав
projects.locations.keys.getKeyString
.Эта
keyString
— это то же значение, которое можно найти в артефакте конфигурации приложения ( Apple | Android | Web ).
Приложения Firebase Apple — каждое приложение имеет свой собственный файл конфигурации и может иметь только один ключ API.
Приложения Firebase для Android . Все приложения Android в проекте Firebase перечислены в одном файле конфигурации, и каждое приложение может иметь только один ключ API. Однако для каждого приложения в этом файле конфигурации может быть указан другой ключ.
Веб-приложения Firebase — каждое приложение имеет свой собственный объект конфигурации и может иметь только один ключ API.
Однако вы можете использовать несколько ключей API с одним приложением. Вы должны предоставить вашему приложению механизм доступа к этим другим ключам API, например, через переменную среды. Механизм доступа к другим ключам API просто не может зависеть от того, чтобы эти ключи API были указаны в вашем файле/объекте конфигурации Firebase.
Когда вы впервые получаете файл/объект конфигурации Firebase вашего приложения , Firebase проверяет, есть ли в вашем проекте какие-либо существующие ключи API, которые имеют «Ограничения приложения» , соответствующие приложению (например, соответствующий идентификатор пакета для приложения Apple).
Если Firebase не найдет подходящих ограниченных ключей, он укажет в файле конфигурации/объекте iOS key
для приложений Apple, Android key
для приложений Android и Browser key
для веб-приложений (при условии, что эти ключи существуют и не имеют «ограничений приложения», которые не позволяют им соответствовать этому приложению).
Да, вы можете вручную удалить ключ API из файла/объекта конфигурации. Однако вы должны предоставить вашему приложению другой механизм доступа к ключу API (например, через переменную среды). В противном случае любые вызовы служб Firebase завершится неудачно.
Да, вы можете вручную отредактировать файл/объект конфигурации, чтобы связать с приложением другой ключ API.
Обратите внимание: если вы повторно получите файл/объект конфигурации вашего приложения из консоли, в нем всегда будут перечислены ключи API, которые Firebase автоматически сопоставляет с этим приложением . Поэтому вам придется повторять внесенные вручную изменения по мере необходимости.
Нет, ключ API идентифицирует только конкретный проект и не может быть перенесен в другой проект.
Вот несколько наиболее распространенных причин недействительных ключей API:
К ключу API применены «Ограничения ключа API» , которые делают его несопоставимым с приложением, пытающимся использовать ключ («Ограничения приложения»), или непригодным для использования для вызываемого API («Ограничения API»).
Ключ API был удален из проекта в Google Cloud Console.
Ключ API не был создан для идентификатора проекта, указанного в файле/объекте конфигурации Firebase приложения.
Один из способов решения этой проблемы – получить обновленную версию файла/объекта конфигурации Firebase вашего приложения , а затем заменить старый файл/объект конфигурации новым обновленным файлом/объектом. Прежде чем отправить файл конфигурации для загрузки или отобразить объект конфигурации в консоли, Firebase проверяет, соответствуют ли указанные ключи API приложениям .
К ключу API, используемому вашим веб-приложением, вероятно, применены «Ограничения API» . В этом случае убедитесь, что Firebase Management API находится в списке разрешенных API.
Если вы удалите ключ API, который используется приложением, вызовы API из этого приложения не будут выполнены. Вы можете получить отчеты, электронные письма или ошибки о том, что вы пытаетесь использовать недействительный ключ API.
Удаление ключа API является безвозвратным и не может быть отменено.