Bật thực thi Kiểm tra ứng dụng cho Chức năng đám mây

Khi bạn hiểu Kiểm tra ứng dụng sẽ ảnh hưởng như thế nào đến người dùng của mình và bạn đã sẵn sàng tiếp tục, bạn có thể bật thực thi Kiểm tra ứng dụng.

Kích hoạt thực thi

Để bắt đầu thực thi các yêu cầu về mã thông báo Kiểm tra ứng dụng trong Chức năng đám mây có thể gọi được của bạn, hãy sửa đổi các chức năng của bạn để kiểm tra mã thông báo Kiểm tra ứng dụng hợp lệ, như hiển thị bên dưới. Sau khi bạn kích hoạt tính năng thực thi, tất cả các yêu cầu chưa được xác minh sẽ bị từ chối.

  1. Cài đặt SDK chức năng đám mây.

    Node.js (thế hệ 1)

    Cập nhật phần phụ thuộc firebase-functions của dự án của bạn lên phiên bản 4.0.0 hoặc mới hơn:

    npm install firebase-functions@">=4.0.0"
    

    Node.js (thế hệ thứ 2)

    Cập nhật phần phụ thuộc firebase-functions của dự án của bạn lên phiên bản 4.0.0 hoặc mới hơn:

    npm install firebase-functions@">=4.0.0"
    

    Python (xem trước)

    Thêm firebase-functions vào functions/requirements.txt :

    firebase-functions >= 0.1.0
    

    Sau đó, cập nhật các phần phụ thuộc trong môi trường ảo của dự án:

    ./venv/bin/pip install -r requirements.txt
    
  2. Bật tùy chọn thời gian chạy thực thi Kiểm tra ứng dụng cho chức năng của bạn:

    Node.js (thế hệ 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 (thế hệ thứ 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.
        ...
      }
    );
    

    Python (xem trước)

    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.
        ...
    
  3. Triển khai lại các chức năng của bạn:

    firebase deploy --only functions
    

Sau khi những thay đổi này được triển khai, các Chức năng đám mây có thể gọi được của bạn sẽ yêu cầu mã thông báo Kiểm tra ứng dụng hợp lệ. SDK máy khách Cloud Functions tự động đính kèm mã thông báo Kiểm tra ứng dụng khi bạn gọi một hàm có thể gọi được.

Bảo vệ phát lại (beta)

Để bảo vệ chức năng có thể gọi khỏi các cuộc tấn công phát lại, bạn có thể sử dụng mã thông báo Kiểm tra ứng dụng sau khi xác minh nó. Sau khi sử dụng mã thông báo, nó sẽ không thể được sử dụng lại.

Lưu ý rằng việc sử dụng tính năng bảo vệ lặp lại sẽ thêm một chuyến đi khứ hồi mạng để xác minh mã thông báo và do đó sẽ tăng thêm độ trễ cho lệnh gọi chức năng đám mây. Vì lý do này, hầu hết các ứng dụng thường chỉ kích hoạt tính năng bảo vệ chống phát lại trên các điểm cuối đặc biệt nhạy cảm.

Để tiêu thụ token:

  1. Trong Bảng điều khiển đám mây , hãy cấp vai trò "Trình xác minh mã thông báo kiểm tra ứng dụng Firebase" cho tài khoản dịch vụ được Chức năng đám mây sử dụng.

    • Nếu bạn đang khởi tạo SDK quản trị một cách rõ ràng và đã chỉ định thông tin xác thực tài khoản dịch vụ SDK quản trị cho dự án của mình thì vai trò bắt buộc đã được cấp.
    • Nếu bạn đang sử dụng Chức năng đám mây thế hệ 1 với cấu hình SDK quản trị mặc định, hãy cấp vai trò này cho tài khoản dịch vụ mặc định của App Engine . Xem Thay đổi quyền của tài khoản dịch vụ .
    • Nếu bạn đang sử dụng Chức năng đám mây thế hệ thứ 2 với cấu hình SDK quản trị mặc định, hãy cấp vai trò cho tài khoản dịch vụ điện toán mặc định .
  2. Đặt consumeAppCheckToken thành true trong định nghĩa hàm của bạn:

    Node.js (thế hệ 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 (thế hệ thứ 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.
        ...
      }
    );
    
  3. Cập nhật mã ứng dụng khách của bạn để nhận được mã thông báo sử dụng có giới hạn khi bạn gọi hàm:

    Nhanh

    let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true)
    let yourCallableFunction =
        Functions.functions().httpsCallable("yourCallableFunction", options: options)
    do {
        let result = try await yourCallableFunction.call()
    } catch {
        // ...
    }
    

    API mô-đun web

    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();