Cloud Functions for Firebase 的安全 HTTP 触发器
Posted
技术标签:
【中文标题】Cloud Functions for Firebase 的安全 HTTP 触发器【英文标题】:Secure HTTP trigger for Cloud Functions for Firebase 【发布时间】:2017-08-31 12:08:44 【问题描述】:有没有办法在触发云功能之前检查用户是否获得了 Firebase 授权? (或函数内)
【问题讨论】:
How to protect firebase Cloud Function HTTP endpoint to allow only Firebase authenticated users?的可能重复 【参考方案1】:是的。您需要将 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
);
);
【讨论】:
嗨@michael-bleigh,有没有办法使用firebase admin sdk验证来自我们服务器的调用? 有没有可能得到cors
的承诺?如果我们没有返回一个 Promise,函数就会被杀死。【参考方案2】:
由于问题要求(1)在函数内或(2)在函数内进行基于身份验证的访问,因此这里是“之前”情况的一种方法:>
由于每个 Firebase 项目也是一个 Google Cloud 项目 - GCP 允许“私有”功能,您可以设置项目范围或每个功能的权限外部函数,以便只有经过身份验证的用户才能触发该函数。
未经授权的用户将在函数调用前被拒绝,即使他们尝试访问端点。
这是关于 setting permissions 和 authenticating users 的文档。在撰写本文时,我相信使用此方法需要用户拥有 Google 帐户才能进行身份验证。
【讨论】:
我遇到了麻烦,我设置为允许来自经过身份验证的用户调用,但在测试时仍然获得 http 403,你确定这些功能是这样工作的吗?以上是关于Cloud Functions for Firebase 的安全 HTTP 触发器的主要内容,如果未能解决你的问题,请参考以下文章