Когда вы поймете, как App Check повлияет на ваших пользователей , и будете готовы продолжить, вы можете включить принудительное применение App Check для вызываемых функций .
Обеспечить правоприменение
Чтобы начать проверку наличия токенов App Check в вызываемых функциях, измените их таким образом, чтобы они проверяли наличие действительных токенов App Check , как показано ниже. После включения проверки все неподтвержденные запросы будут отклонены.
Установите SDK Cloud Functions .
Node.js (2-го поколения)
Обновите зависимость
firebase-functionsв вашем проекте до версии 4.0.0 или новее:npm install firebase-functions@">=4.0.0"Node.js (1-го поколения)
Обновите зависимость
firebase-functionsв вашем проекте до версии 4.0.0 или новее:npm install firebase-functions@">=4.0.0"Python (предварительная версия)
Добавьте
firebase-functionsвfunctions/requirements.txt:firebase-functions >= 0.1.0Затем обновите зависимости в виртуальной среде вашего проекта:
./venv/bin/pip install -r requirements.txtВключите параметр принудительного выполнения проверки приложений (App Check) для вашей функции:
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. ... } );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. ... });Python (предварительная версия)
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
После внедрения этих изменений ваши вызываемые функции будут нуждаться в действительных токенах App Check . Клиентские SDK Cloud Functions автоматически добавляют токен App Check при вызове вызываемой функции.
Защита от повторного воспроизведения (бета-версия)
Для защиты вызываемой функции от атак повторного воспроизведения можно использовать токен App Check после его проверки. После использования токен нельзя использовать повторно.
Следует отметить, что использование защиты от повторного воспроизведения добавляет сетевой обмен данными при проверке токена, и, следовательно, увеличивает задержку при вызове функции. По этой причине большинство приложений обычно включают защиту от повторного воспроизведения только на особо важных конечных точках.
Для использования токенов:
В консоли Google Cloud предоставьте учетной записи службы, используемой функцией, роль "Firebase App Check Token Verifier".
- Если вы явно инициализируете Admin SDK и указали учетные данные сервисной учетной записи Admin SDK вашего проекта, необходимая роль уже предоставлена.
- Если вы используете Cloud Functions первого поколения с конфигурацией Admin SDK по умолчанию, предоставьте роль учетной записи службы App Engine по умолчанию . См. раздел «Изменение разрешений учетной записи службы» .
- Если вы используете Cloud Functions второго поколения с конфигурацией Admin SDK по умолчанию, предоставьте роль учетной записи службы вычислений по умолчанию .
В определении функции установите значение
consumeAppCheckTokenравнымtrue: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. ... } );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. ... });Обновите клиентский код вашего приложения, чтобы при вызове функции вы получали расходуемые токены ограниченного использования:
Быстрый
let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true) let yourCallableFunction = Functions.functions().httpsCallable("yourCallableFunction", options: options) do { let result = try await yourCallableFunction.call() } catch { // ... }Kotlin
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();Web
import { getFunctions, httpsCallable } from "firebase/functions"; const yourCallableFunction = httpsCallable( getFunctions(), "yourCallableFunction", { limitedUseAppCheckTokens: true }, ); await yourCallableFunction();