适用于Firebase的云功能的安全HTTP触发器

时间:2017-04-05 18:09:15

标签: firebase firebase-authentication google-cloud-functions

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

2 个答案:

答案 0 :(得分:34)

是。您需要将Firebase ID令牌与请求一起发送(例如,在AJAX请求的Authorization标头中),然后使用Firebase Admin SDK进行验证。 Cloud Functions for Firebase示例存储库中有in-depth example。它看起来像这样(对于SO帖子做得更短):

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 :(得分:1)

由于该问题要求在函数中进行(1)或(2)之前中的基于身份验证的访问,因此以下是“ before”情况下的方法:>

由于每个Firebase项目也是Google Cloud Project,并且 GCP允许“私有”功能,因此您可以在项目范围外或按功能设置外部功能,以便只有经过身份验证的用户才能触发该功能。

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

这里是setting permissionsauthenticating users的文档。在撰写本文时,我相信使用此方法需要用户拥有一个Google帐户进行身份验证。