Когда вы поймете, как проверка приложений повлияет на ваших пользователей , и будете готовы продолжить, вы можете включить принудительную проверку приложений.
Включение принудительного исполнения
Чтобы начать применять требования к токену проверки приложений в вызываемых облачных функциях, измените свои функции, чтобы они проверяли действительные токены проверки приложений, как показано ниже. После включения принудительного применения все неподтвержденные запросы будут отклонены.
Установите SDK облачных функций.
Node.js (1-го поколения)
Обновите зависимость
firebase-functions
вашего проекта до версии 4.0.0 или новее:npm install firebase-functions@">=4.0.0"
Node.js (2-го поколения)
Обновите зависимость
firebase-functions
вашего проекта до версии 4.0.0 или новее:npm install firebase-functions@">=4.0.0"
Питон (предварительная версия)
Добавьте
firebase-functions
вfunctions/requirements.txt
:firebase-functions >= 0.1.0
Затем обновите зависимости в виртуальной среде вашего проекта:
./venv/bin/pip install -r requirements.txt
Включите параметр среды выполнения App Check для вашей функции:
Node.js (1-го поколения)
const functions = require("firebase-functions/v1"); exports.yourV1CallableFunction = functions .runWith({ enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens. }) .https.onCall((data, context) => { // context.app contains data from App Check, including the app ID. // Your function logic follows. ... });
Node.js (2-го поколения)
const { onCall } = require("firebase-functions/v2/https"); exports.yourV2CallableFunction = onCall( { enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens. }, (request) => { // request.app contains data from App Check, including the app ID. // Your function logic follows. ... } );
Питон (предварительная версия)
from firebase_functions import https_fn @https_fn.on_call( enforce_app_check=True # Reject requests with missing or invalid App Check tokens. ) def your_callable_function(req: https_fn.CallableRequest) -> https_fn.Response: # req.app contains data from App Check, including the app ID. # Your function logic follows. ...
Перераспределите свои функции:
firebase deploy --only functions
После развертывания этих изменений вашим вызываемым облачным функциям потребуются действительные токены проверки приложений. Клиентские SDK Cloud Functions автоматически прикрепляют токен проверки приложений при вызове вызываемой функции.
Защита от повторного воспроизведения (бета)
Чтобы защитить вызываемую функцию от повторных атак, вы можете использовать токен проверки приложения после его проверки. После того, как токен израсходован, его нельзя использовать снова.
Обратите внимание, что при использовании защиты от воспроизведения добавляется двусторонний сетевой обход для проверки токена и, следовательно, увеличивается задержка при вызове облачной функции. По этой причине большинство приложений обычно включают защиту от повторного воспроизведения только на особо важных конечных точках.
Чтобы использовать токены:
В облачной консоли назначьте роль Firebase App Check Token Verifier учетной записи службы, используемой облачной функцией.
- Если вы явно инициализируете Admin SDK и указали учетные данные служебной учетной записи Admin SDK вашего проекта, необходимая роль уже предоставлена.
- Если вы используете Cloud Functions 1-го поколения с конфигурацией Admin SDK по умолчанию, назначьте роль учетной записи службы App Engine по умолчанию . См. раздел Изменение разрешений учетной записи службы .
- Если вы используете облачные функции 2-го поколения с конфигурацией Admin SDK по умолчанию, назначьте роль учетной записи службы вычислений по умолчанию .
В определении функции установите для
consumeAppCheckToken
значениеtrue
:Node.js (1-го поколения)
const functions = require("firebase-functions/v1"); exports.yourV1CallableFunction = functions .runWith({ enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens. consumeAppCheckToken: true // Consume the token after verification. }) .https.onCall((data, context) => { // context.app contains data from App Check, including the app ID. // Your function logic follows. ... });
Node.js (2-го поколения)
const { onCall } = require("firebase-functions/v2/https"); exports.yourV2CallableFunction = onCall( { enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens. consumeAppCheckToken: true // Consume the token after verification. }, (request) => { // request.app contains data from App Check, including the app ID. // Your function logic follows. ... } );
Обновите код клиента приложения, чтобы получать расходуемые токены ограниченного использования при вызове функции:
Быстрый
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }
Модульный веб-API
import { getFunctions, httpsCallable } from "firebase/functions"; const yourCallableFunction = httpsCallable( getFunctions(), "yourCallableFunction", { limitedUseAppCheckTokens: true }, ); await yourCallableFunction();
Kotlin+KTX
val yourCallableFunction = Firebase.functions.getHttpsCallable("yourCallableFunction") { limitedUseAppCheckTokens = true } val result = yourCallableFunction.call().await()
Java
HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable( "yourCallableFunction", new HttpsCallableOptions.Builder() .setLimitedUseAppCheckTokens(true) .build() ); Task<HttpsCallableResult> result = yourCallableFunction.call();