我正在按照本指南尝试Google云端功能:https://cloud.google.com/functions/docs/quickstart
我创建了一个带有HTTP触发器的函数,并且能够执行POST请求以触发函数写入数据存储区.
我想知道是否有办法保护这个HTTP端点?目前似乎它将接受来自任何地方/任何人的请求.
当谷歌搜索时,我看到大多数结果都谈到使用Firebase保护内容.但是,我没有在这里使用Firebase服务.
我的选择是让它打开,希望没有人知道URL端点(默默无闻的安全性),或者在函数本身中实现我自己的auth检查?
security authentication google-cloud-datastore google-cloud-functions
随着最新的Firebase Update可调用功能的推出.我的问题是这种新方式是否比"旧"http触发器更快,如果它更安全.
我没有这方面的专业知识,但我认为HTTP与HTTPS可能有所不同.
这对我来说很有意思,因为如果可调用函数更快,它们就具有这种优势,但它们的缺点在于灵活性:其他来源无法达到它们.
如果可调用函数在速度或安全性方面没有优势,我没有理由将其切换.
在使用Firebase(在这种情况下使用Firebase云功能)时,我们必须为每个带宽字节付费.
所以,我想知道我们如何才能处理某个人以某种方式找到我们的端点然后故意(通过脚本或工具)连续请求的情况?
我在互联网上做了一些搜索,但没有看到任何可以帮助.除了这个,但没有真正有用.
花了一段时间寻找一个似乎是一个简单问题的解决方案,但是......如何在云功能中获取当前用户的详细信息(何时不使用functions.auth触发器)?我相信必须有一个简单的解决方案.(我希望)
感谢您的回复...刚刚完成了但是如何在存储触发事件中从Firebase数据库中获取/ user/uid?例如
exports.addUploadInfoToDatabase = functions.storage.object().onChange(event => {
console.log("firebase storage has been changed");
// need to find the uid in here somehow
admin.database().ref(`/user/uid`).push({testKey:"testData"});
})
Run Code Online (Sandbox Code Playgroud)
如果我错过了你的回复中的重点,那就是Applogies.
谢谢...
有没有办法在触发云功能之前检查用户是否已获得firebase授权?(或在功能内)
我正在使用 firebase 云函数,第一次看到 cors 然后将 origin 设置为 true .. 但是这样任何人都可以访问我的函数,所以我寻找了一种只允许特定域访问我的云函数的方法,我得到了来自 cors github 页面的代码并尝试了它,但我在等待和等待后意外关闭了连接。
这是我的函数 index.js --
const functions = require('firebase-functions');
const cors = require('cors');
var whitelist = ['http://example1.com', 'http://example2.com']
var corsOptionsDelegate = function (req, callback) {
var corsOptions;
if (whitelist.indexOf(req.header('Origin')) !== -1) {
corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response
}else{
corsOptions = { origin: false } // disable CORS for this request
}
callback(null, corsOptions) // callback expects two parameters: …Run Code Online (Sandbox Code Playgroud) 我已经看到了一些关于如何保护经过身份验证的用户进行api调用的示例(针对Firebase的云功能的安全HTTP触发器,如何保护firebase云功能HTTP端点仅允许Firebase经过身份验证的用户?).但我的问题是我需要从我的服务器(我实现自定义令牌授权)中调用这些端点.有没有办法保护我服务器的电话?也许为它或其他什么产生一个令牌?
有许多使用Express for Firebase Cloud Functions的示例。
在我发现的每个示例中,代码都将Express应用程序公开为单个Cloud Function:
exports.app = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
对于一个人的Firebase项目功能,这意味着他们将看到一个名为“ app”的条目,并且所有Express.js HTTP侦听器的所有日志都将转到Firebase中的一个位置。这也意味着,无论Express.js应用程序有多大,Firebase都会在该应用程序的生产环境中部署单个功能。
另外,在使用firebase-functions.https.onRequest每种导出时,例如在Typescript中,您可以获得单独的功能:
export const hello = functions.https.onRequest(async (req, res) => {
res.status(200).send('hello world');
});
Run Code Online (Sandbox Code Playgroud)
在Firebase控制台中,我有hello函数,在index.js中还有另一个函数:
这也意味着Firebase将为每个函数创建不同的节点/实例:hello和emphemeralKey。
我将在Firebase控制台中为每个功能获得单独的日志记录。
我想使用中间件来确保将有效的身份验证令牌传递给我的端点Cloud Functions(例如Firebase示例),但是我不希望不使用单个“ app”单个Cloud Function,而希望在函数导出中使用专用函数我的index.js。
node.js express firebase firebase-authentication google-cloud-functions
在我的项目中,我使用了一系列 GCP 服务,包括 Firestore、Cloud Functions 和 Firebase 身份验证。
鉴于用户能够通过 Firebase 身份验证服务登录,我认为应该可以检查和验证调用我的云功能的用户。问题是我找不到任何文档或如何执行此操作的示例。
我知道有一些特殊的可调用函数,但它不适合我。我正在使用 express 来处理请求。
是否可以从在客户端登录的用户(firebase auth)检索某种 JWT 令牌,然后将其与请求一起发送到我的云功能,然后在那里以某种方式检查它?或者有没有其他机制可以实现上述CF保护?
PS 我看到了这个问题,但这不是我在问什么,因为它与Firebase Functions相关,我说的是Cloud Functions,它非常相似但不完全相同。
我想使用 firebase-tools 在 Firebase 上定义自定义函数。有没有办法从firebase-functions获取 userId ?
在此代码示例中,是否可以获取发送请求的用户?
const functions = require('firebase-functions');
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码获取它,但没有成功functions.auth.user().uid。
我对 js 和 firebase 都很陌生,所以请放轻松,我正在努力学习。
javascript google-authentication firebase google-cloud-functions