web-dev-qa-db-ja.com

Cloud Functions forFirebaseのセキュアHTTPトリガー

クラウド機能をトリガーする前に、ユーザーがFirebaseで承認されているかどうかを確認する方法はありますか? (または関数内)

12

はい。リクエストと一緒にFirebaseIDトークンを送信する必要があります(たとえば、AJAXリクエストのAuthorizationヘッダー)。次に、Firebase AdminSDKを使用して確認します。は 詳細な例 Cloud Functions for Firebaseサンプルリポジトリにあります。次のようになります(SO post)の場合は短くします):

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')();

const validateFirebaseIdToken = (req, res, next) => {
  cors(req, res, () => {
    const idToken = req.headers.authorization.split('Bearer ')[1];
    admin.auth().verifyIdToken(idToken).then(decodedIdToken => {
      console.log('ID Token correctly decoded', decodedIdToken);
      req.user = decodedIdToken;
      next();
    }).catch(error => {
      console.error('Error while verifying Firebase ID token:', error);
      res.status(403).send('Unauthorized');
    });
  });
};

exports.myFn = functions.https.onRequest((req, res) => {
  validateFirebaseIdToken(req, res, () => {
    // now you know they're authorized and `req.user` has info about them
  });
});
35
Michael Bleigh

質問は、(1)関数内、または(2)before関数内での認証ベースのアクセスを要求するため、「before」の場合のメソッドは次のとおりです。 >>

すべてのFirebaseプロジェクトはGoogleCloudプロジェクトでもあるためGCPでは「プライベート」機能が許可されているため、プロジェクト全体または機能ごとの権限を設定できます関数の外部。認証されたユーザーのみが関数を起動できるようにします。

許可されていないユーザーは、エンドポイントに到達しようとしても、関数の呼び出しの前に拒否されます。

権限の設定 および ユーザーの認証 に関するドキュメントは次のとおりです。執筆時点では、この方法を使用するには、ユーザーが認証するためにGoogleアカウントを持っている必要があると思います。

0
Tedskovsky