Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

CloudFunctionsのアプリチェックの実施を有効にする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にできます。

呼び出し可能な Cloud Functions で App Check トークン要件の適用を開始するには、以下に示すように、有効な App Check トークンを確認するように関数を変更します。強制を有効にすると、未確認のリクエストはすべて拒否されます。

  1. プロジェクトの firebase firebase-functions依存関係をバージョン 3.14.0 以降に更新します。

    npm install firebase-functions@">=3.14.0"
    

    そして、プロジェクトの firebase firebase-admin依存関係をバージョン 9.8.0 以降に更新します。

    npm install firebase-admin@">=9.8.0"
    
  2. 関数にcontext.appのチェックを追加します。 context.appが定義されていない場合、関数は失敗するはずです。

    exports.yourCallableFunction = functions.https.onCall((data, context) => {
      // context.app will be undefined if the request doesn't include an
      // App Check token. (If the request includes an invalid App Check
      // token, the request will be rejected with HTTP error 401.)
      if (context.app == undefined) {
        throw new functions.https.HttpsError(
            'failed-precondition',
            'The function must be called from an App Check verified app.')
      }
    
      // Your function logic follows.
    });
    
  3. (オプション) 独自のロジックで無効な App Check トークンを処理する場合 (たとえば、完全な適用を有効にする前に、無効な要求を拒否するのではなく、一時的にログに記録する場合)、 allowInvalidAppCheckTokentrueに設定します。

    exports.yourCallableFunction = functions.
      .runWith({
        allowInvalidAppCheckToken: true  // Opt-out: Requests with invalid App
                                         // Check tokens continue to your code.
      })
      .https.onCall((data, context) => {
        // Now, requests with an invalid App Check token are not rejected.
        //
        // context.app will be undefined if the request:
        //   1) Does not include an App Check token
        //   2) Includes an invalid App Check token
        if (context.app == undefined) {
          // You can inspect the raw request header to check whether an App
          // Check token was provided in the request. If you're not ready to
          // fully enable App Check yet, you could log these conditions instead
          // of throwing errors.
          const rawToken = context.rawRequest.header['X-Firebase-AppCheck'];
          if (rawToken == undefined) {
            throw new functions.https.HttpsError(
                'failed-precondition',
                'The function must be called from an App Check verified app.'
            );
          } else {
            throw new functions.https.HttpsError(
                'unauthenticated',
                'Provided App Check token failed to validate.'
            );
          }
        }
    
        // Your function logic follows.
      });
    

    App Check による完全な保護を有効にするには、 allowInvalidAppCheckTokenfalseに設定します。

  4. 関数を再デプロイします。

    firebase deploy --only functions
    

これらの変更がデプロイされると、呼び出し可能な Cloud Functions に有効な App Check トークンが必要になります。 Cloud Functions クライアント SDK は、呼び出し可能な関数を呼び出すと、App Check トークンを自動的にアタッチします。