Cloud Functions for Firebase 的安全 HTTP 触发器

Secure HTTP trigger for Cloud Functions for Firebase

有没有办法在触发云功能之前检查用户是否获得 firebase 授权? (或函数内)

是的。您需要连同请求一起发送 Firebase ID 令牌(例如在 AJAX 请求的 Authorization header 中),然后使用 Firebase Admin SDK 对其进行验证。 Cloud Functions for Firebase 示例存储库中有一个 in-depth example。它看起来像这样(缩短为 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
  });
});

由于问题要求基于身份验证的访问 (1) 在函数内,或 (2) before 函数,这里是 "before" 案例的方法:>

由于每个 Firebase 项目也是一个 Google 云项目——并且 GCP 允许 "private" 函数, 您可以设置项目范围或每个-函数权限函数之外,这样只有经过身份验证的用户才能触发函数。

未经授权的用户将在函数调用前被拒绝,即使他们试图访问端点。

这是关于 setting permissions and authenticating users 的文档。在撰写本文时,我认为使用此方法需要用户拥有 Google 帐户才能进行身份验证。