Ключи API в приватных вызовах

Распространённое заблуждение: достаточно пометить вызов API как private, и все данные защищены. Это не так.

Приватный вызов действительно выполняется в облачной функции, и всё, что лежит в её теле, скрыто от пользователя. Но только при одном условии — эти данные не приходят с фронтенда. Если ключ подставляется из приложения (скажем, из Firebase Remote Config), он всё равно виден.

Где размещать ключ

Ключ должен быть частью заголовка запроса или самого адреса эндпоинта — и задан прямо в настройке вызова, а не передан переменной.

Заголовок:

{ "Authorization": "Bearer YOUR_API_KEY_HERE" }

Или адрес:

https://api.example.com/resource?api_key=YOUR_API_KEY_HERE

Как только ключ становится переменной, приходящей из приложения, он оказывается в клиентском коде — и смысл приватного вызова теряется.

Как проверить

Выгрузите код приложения и поищите ключ в файлах фронтенда. Если находится — значит, он передаётся с клиента.

Небезопасно:

Ключ API виден в клиентском коде

Безопасно:

Ключ API отсутствует в клиентском коде

инфо

Правило простое: ничего чувствительного на стороне клиента. Ключи, токены, секреты — только в облачной функции.

перевод официальной документации FlutterFlow

обновлено

ESC