Когда вы поймете, как проверка приложений повлияет на ваших пользователей , и будете готовы продолжить, вы можете включить принудительную проверку приложений.
Включение принудительного исполнения
Чтобы начать применять требования к токену проверки приложений в вызываемых облачных функциях, измените свои функции, чтобы они проверяли действительные токены проверки приложений, как показано ниже. После включения принудительного применения все неподтвержденные запросы будут отклонены.
Установите 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 автоматически прикрепляют токен проверки приложений при вызове вызываемой функции.
Защита от повторного воспроизведения (бета)
Чтобы защитить вызываемую функцию от повторных атак, вы можете использовать токен проверки приложения после его проверки. После того, как токен израсходован, его нельзя использовать снова.
Обратите внимание, что при использовании защиты от воспроизведения добавляется двусторонний сетевой обход для проверки токена и, следовательно, увеличивается задержка при вызове облачной функции. По этой причине большинство приложений обычно включают защиту от повторного воспроизведения только на особо важных конечных точках.
Чтобы использовать токены, задайте для параметра 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();