Ключ API — это уникальная строка, используемая для маршрутизации запросов к вашему проекту Firebase при взаимодействии с Firebase и сервисами Google. На этой странице представлена базовая информация о ключах API, а также рекомендации по использованию и управлению ключами API в приложениях Firebase.
Общая информация о ключах API и Firebase
Ключи API для Firebase отличаются от обычных ключей API
В отличие от того, как обычно используются ключи API, ключи API для служб Firebase не используются для управления доступом к внутренним ресурсам ; это можно сделать только с помощью Firebase Security Rules (для управления тем, какие конечные пользователи могут получать доступ к ресурсам) и Firebase App Check (для управления тем, какие приложения могут получать доступ к ресурсам).
Обычно необходимо тщательно защищать ключи API (например, используя службу хранилища или устанавливая ключи в качестве переменных среды); однако ключи API для служб Firebase можно включать в код или регистрировать в файлах конфигурации.
Хотя ключи API для служб Firebase можно безопасно включать в код, вам следует просмотреть и применить к ним соответствующие ограничения и лимиты .
Создание API-ключей
Проект Firebase может иметь много ключей API, но каждый ключ API может быть связан только с одним проектом Firebase.
Firebase автоматически создает ключи API для вашего проекта, когда вы выполняете любое из следующих действий:
- Создать проект Firebase >
Browser key
создан автоматически - Создайте приложение Firebase Apple >
iOS key
создан автоматически - Создайте приложение Firebase для Android >
Android key
создан автоматически
Вы также можете создавать собственные ключи API в консоли Google Cloud , например, для разработки или отладки . Подробнее о том, когда это может быть рекомендовано, читайте далее на этой странице.
Поиск ключей API
Вы можете просматривать и управлять всеми ключами API вашего проекта на панели API и службы > Учетные данные в консоли Google Cloud .
Вы также можете узнать, какой ключ API автоматически сопоставляется с приложением Firebase, в следующих местах. По умолчанию все приложения Firebase вашего проекта для одной платформы (Apple, Android или веб-приложения) будут использовать один и тот же ключ API.
Firebase Apple Apps — найдите автоматически сопоставленный ключ API в файле конфигурации Firebase,
, в полеGoogleService-Info.plist API_KEY
.Приложения Firebase для Android — найдите автоматически сопоставленный ключ API в файле конфигурации Firebase,
, в полеgoogle-services.json current_key
.Firebase Web Apps — найдите автоматически сопоставленный ключ API в объекте конфигурации Firebase в поле
apiKey
.
Использование API-ключа
Ключи API используются для идентификации вашего проекта Firebase при взаимодействии с сервисами Firebase/Google. В частности, они используются для связывания запросов API с вашим проектом для управления квотами и выставления счетов. Они также полезны для доступа к публичным данным.
Например, вы можете явно использовать ключ API, передав его значение в вызов REST API в качестве параметра запроса. В этом примере показано, как можно выполнить запрос к API сокращателя ссылок Dynamic Links :
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Когда ваше приложение обращается к API Firebase, требующему API-ключа, предоставленного мобильным/веб-клиентом, оно автоматически ищет API-ключ вашего проекта в файле/объекте конфигурации Firebase. Однако вы можете предоставить API-ключи для своего приложения, используя другой механизм, включая переменные среды.
Проверьте и примените соответствующие ограничения к ключам API (рекомендуется)
Хотя нет необходимости рассматривать ключ API для служб Firebase как секрет, вам следует ознакомиться и применить ограничения и лимиты, описанные в этом разделе.
Проверьте API, автоматически добавленные в список разрешенных для ваших ключей API Firebase.
Когда Firebase создаёт ключ API в вашем проекте, мы автоматически добавляем к нему «Ограничения API» . API, добавленные в этот разрешённый список, — это API, связанные с Firebase, которые требуют от клиента предоставления ключа API вместе с вызовом. Обратите внимание, что большинство API, необходимых для использования сервисов Firebase, на самом деле не обязательно должны быть в разрешённом списке для ваших ключей API.
Поскольку Firebase добавляет необходимые API для всех сервисов Firebase, разрешённый список для ключа API может включать API для продуктов, которые вы не используете. Вы можете удалить API из разрешённого списка, но будьте очень осторожны, чтобы не удалить API, необходимые для Firebase и используемых вами сервисов Firebase (см. список API, связанных с Firebase , которые должны быть включены в разрешённый список для каждого сервиса/продукта). В противном случае при вызовах сервисов Firebase будут возникать ошибки.
Увеличьте квоту, если вы используете Authentication на основе пароля.
Если вы используете Firebase Authentication по паролю, и кто-то получит ваш ключ API, он не сможет получить доступ к базе данных вашего проекта Firebase или данным Cloud Storage пока эти данные защищены Firebase Security Rules . Однако злоумышленники могут использовать ваш ключ API для доступа к конечным точкам аутентификации Firebase и выполнять запросы аутентификации в отношении вашего проекта.
Чтобы снизить вероятность несанкционированного использования ключа API для атаки методом подбора пароля, можно ужесточить квоту по умолчанию для конечных точек identitytoolkit.googleapis.com
, чтобы она соответствовала обычному трафику вашего приложения. Имейте в виду, что если вы ужесточите квоту и в вашем приложении внезапно появится больше пользователей, вы можете столкнуться с ошибками входа, пока не увеличите квоту. Вы можете изменить квоты API вашего проекта в консоли Google Cloud .
Используйте отдельные, ограниченные ключи API для любых служб, не относящихся к Firebase.
Хотя API-ключи, используемые для служб Firebase, обычно не требуют особого внимания, следует принять дополнительные меры предосторожности в отношении API-ключей, используемых с другими API Google Cloud .
Если вы используете API Google Cloud (на любой платформе), не предназначенный для сервиса/продукта Firebase, мы настоятельно рекомендуем создать отдельные API-ключи с ограниченным доступом для использования с этими API. Это особенно важно, если API предназначен для платного сервиса Google Cloud .
Например, если вы используете Firebase ML и API Cloud Vision на iOS, вам следует создать отдельные ключи API , которые будут использоваться только для доступа к API Cloud Vision.
Используя отдельные ограниченные ключи API для API, отличных от Firebase, вы можете при необходимости ротировать или заменять ключи, а также добавлять дополнительные ограничения к ключам API, не прерывая использование служб Firebase.
В этих инструкциях описывается, как создать отдельный ограниченный ключ API для поддельного API, называемого Super Service API
.
Шаг 1: Настройте существующие ключи API, чтобы запретить доступ к Super Service API
Откройте страницу «Учётные данные» в консоли Google Cloud . При появлении запроса выберите свой проект.
Для каждого существующего ключа 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 Local Emulator Suite для разработки вместе с Firebase ML , вам необходимо создать и использовать API-ключ, предназначенный только для отладки. Инструкции по созданию такого ключа можно найти в документации Firebase ML .
Часто задаваемые вопросы и устранение неполадок
Часто задаваемые вопросы
Да, по умолчанию ко всем API-ключам, которые Firebase автоматически предоставляет для использования с API, связанными с Firebase, автоматически применяются «Ограничения API» . См. список API, связанных с Firebase , в этом списке разрешенных.
API, добавленные в этот разрешённый список, — это API, вызываемые сервисами Firebase из клиентского кода и требующие API-ключей для идентификации вашего проекта или приложения Firebase. Обратите внимание, что большинству API, необходимых для использования сервисов Firebase, на самом деле не требуется наличие API-ключей в разрешённом списке.
Поскольку Firebase добавляет необходимые API для всех сервисов Firebase, разрешённый список для ключа API может включать API для продуктов, которые вы не используете. Вы можете удалить API из разрешённого списка, но будьте очень осторожны, чтобы не удалить API, необходимые для Firebase и используемых вами сервисов Firebase (см. список API, связанных с Firebase , которые должны быть включены в разрешённый список для каждого сервиса/продукта). В противном случае при вызовах сервисов Firebase будут возникать ошибки.
Вы можете просмотреть все свои ключи API и их «ограничения API» на панели API и службы > Учетные данные в консоли Google Cloud .
Обратите внимание на то, как Firebase применяет эти «ограничения API»:
Начиная с мая 2024 года все новые ключи API, автоматически предоставляемые Firebase, автоматически ограничиваются списком API, связанных с Firebase .
В течение мая 2024 года все существующие и неограниченные ключи API, которые Firebase ранее автоматически предоставила, будут ограничены списком API, связанных с Firebase, а также любыми из включенных в настоящее время API проекта.
Любые существующие и уже ограниченные ключи API, которые Firebase ранее автоматически предоставила, не были изменены.
Существующие ключи API, которые не были автоматически предоставлены Firebase, не были изменены.
Чтобы определить, какой ключ API связан с вашим приложением Firebase, вы можете использовать любой из следующих вариантов:
Консоль Firebase
Перейдите в Настройки проекта , а затем прокрутите вниз до карточки Ваши приложения .
Выберите интересующее вас приложение.
Получите файл/объект конфигурации Firebase для интересующего вас приложения, а затем найдите его ключ API:
Apple : загрузите
GoogleService-Info.plist
и найдите полеAPI_KEY
Android : загрузите
google-services.json
, найдите конфигурацию интересующего вас приложения (найдите имя пакета), а затем найдите полеcurrent_key
Веб : выберите опцию «Конфигурация» , а затем найдите поле
apiKey
Firebase CLI
Получите файл/объект конфигурации 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
REST 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 не может зависеть от того, указаны ли эти ключи в файле конфигурации/объекте 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 Firebase в списке разрешенных API-ограничений ключа должны быть только те API, которые требуют от клиента предоставления ключа API вместе с вызовом. Обратите внимание, что это требование действует лишь для немногих API, связанных с Firebase. Большинство API, связанных с Firebase, включенных в вашем проекте, не обязательно должны быть в списке разрешенных API-ограничений ключа.
Используйте следующую таблицу, чтобы определить, какие API, связанные с Firebase, необходимо включить в список разрешенных API-ограничений для ключа Firebase API. Помните, что ключи Firebase API следует использовать только для служб Firebase. Узнайте больше о создании отдельных ограниченных API-ключей для определенных типов API .
Вы можете просматривать и управлять ключами API вашего проекта на панели API и службы > Учетные данные в консоли Google Cloud .
Имя API (имя сервиса) | Отображаемое имя API | Ассоциированная Firebase услуга/продукт |
---|---|---|
firebase.googleapis.com | API управления Firebase | все продукты |
logging.googleapis.com | API облачного логирования | все продукты |
firebaseinstallations.googleapis.com | API установок Firebase | Cloud Messaging , Crashlytics , In-App Messaging , Performance Monitoring , Remote Config , Firebase ML |
firebaseappcheck.googleapis.com | API проверки приложений Firebase | App Check |
firebaseappdistribution.googleapis.com | API распространения приложений Firebase | App Distribution |
firebaseapptesters.googleapis.com | API тестировщиков приложений Firebase | App Distribution |
identitytoolkit.googleapis.com | API набора инструментов идентификации | Authentication |
securetoken.googleapis.com | API службы токенов | Authentication |
firebaserules.googleapis.com * | API правил Firebase | Cloud Firestore , Cloud Storage , Realtime Database |
datastore.googleapis.com | API облачного хранилища данных | Cloud Firestore |
firestore.googleapis.com | API Google Cloud Firestore | Cloud Firestore |
fcmregistrations.googleapis.com | API регистрации FCM | Cloud Messaging |
firebasestorage.googleapis.com | Облачное хранилище для API Firebase | Cloud Storage |
firebasedynamiclinks.googleapis.com | API динамических ссылок Firebase | Dynamic Links |
firebasehosting.googleapis.com * | API хостинга Firebase | Hosting |
firebaseinappmessaging.googleapis.com | API для обмена сообщениями внутри приложения Firebase | In-App Messaging |
firebaseml.googleapis.com | Firebase ML API | Firebase ML |
mlkit.googleapis.com ** | API комплекта ML | Firebase ML |
mobilecrashreporting.googleapis.com | API для отчетов о мобильных сбоях | Performance Monitoring |
play.googleapis.com | API разработчика Android для Google Play | Performance Monitoring |
firebaseremoteconfig.googleapis.com | API удаленной настройки Firebase | Performance Monitoring , Remote Config |
firebaseremoteconfigrealtime.googleapis.com | API удаленной настройки Firebase в реальном времени | Performance Monitoring , Remote Config |
cloudconfig.googleapis.com ** | Н/Д | Remote Config |
firebasedatabase.googleapis.com * | API базы данных Firebase Realtime | Realtime Database |
firebasevertexai.googleapis.com | API логики ИИ Firebase | Клиентские SDK Firebase AI Logic |
* Требуется только в том случае, если вы используете ключ API Firebase со сторонними инструментами или прямым доступом REST к сервису/продукту Firebase.
** Требуется для более ранних версий SDK продукта. Если вы используете последнюю версию SDK, API не обязательно должен быть в разрешённом списке ключа.
Поиск неисправностей
Следуйте инструкциям в этом разделе часто задаваемых вопросов, если вы получаете ошибку API_KEY_SERVICE_BLOCKED
или ошибку, похожую на следующую:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
К ключу API, используемому вашим приложением для вызова API, вероятно, применены «Ограничения API» , а в разрешенном списке ключа этот API отсутствует.
Если вы получаете эту ошибку при попытке использовать службу/продукт, связанный с Firebase, убедитесь, что используемый вами ключ API содержит все требуемые API, включенные в разрешенный список «Ограничения API» ключа .
Если вы получаете эту ошибку при попытке использовать службу, не относящуюся к Firebase , настоятельно рекомендуем создать новый ключ API специально для этой службы и API. Ключи API Firebase следует использовать только для служб/продуктов Firebase. Узнайте больше о создании отдельных ключей API с ограниченным доступом для определённых типов API .
К ключу API, используемому вашим веб-приложением, вероятно, применены «Ограничения API» . В этом случае убедитесь, что API управления Firebase включен в список разрешённых API.
Вот несколько наиболее распространенных причин недействительных ключей API:
К ключу API применены «Ограничения ключа API» , которые делают его несовместимым с приложением, пытающимся использовать ключ («Ограничения приложения»), или непригодным для вызываемого API («Ограничения API»).
API-ключ был удален из проекта в консоли Google Cloud .
Ключ API не был создан для идентификатора проекта, указанного в файле/объекте конфигурации Firebase приложения.
Один из способов решения этой проблемы — получить обновлённую версию файла/объекта конфигурации Firebase вашего приложения , а затем заменить старый файл/объект конфигурации новым обновлённым файлом/объектом. Перед отправкой файла конфигурации для загрузки или отображением объекта конфигурации в консоли Firebase проверяет, соответствуют ли указанные ключи API приложению(ям) .