我在nodejs和python中编写了一些可调用函数,并且从客户端代码调用时两者都工作正常。但是,当前权限为Cloud Functions Invoker
这些可调用函数设置为 allUsers
。正在删除allUsers
将导致函数抛出 UNAUTHENTICATED
.
我希望这些可调用函数只能从我的 firebase 应用程序调用,但我从中了解到 post这种限制是不可能的。那么,限制/限制仅从经过身份验证的用户调用可调用函数以维护安全性的最佳实践是什么?
我已经完成了必要的身份验证检查(我希望这些足以)以确保他们是我的应用程序上经过身份验证的用户,即:
//For python
authorization = request.headers.get('Authorization')
id_token = None
if authorization and authorization.startswith('Bearer '):
id_token = authorization.split('Bearer ')[1]
else:
json_abort(401, message="No authorization found")
try:
decoded_token = auth.verify_id_token(id_token)
except Exception as e:
json_abort(403, message="Invalid authorization")
//For nodejs
module.exports = functions.https.onCall((data, context) => {
let auth = context.auth
if (!auth) throw new functions.https.HttpsError("permission-denied", "Caller is not authenticated.")
//...
})
我能做的就是这些吗?我可以在资源权限级别实现其他任何事情,而不是离开 Cloud Functions Invoker
在allUsers
?
最佳答案
So what is the best practice in restricting/limiting callable functions to be called only from my authenticated users to maintain security?
您无法阻止任何客户端调用该函数(当您允许“allUsers”时,HTTP 端点始终是公开的),因此您必须在函数内部检查客户端是否提供了身份验证凭据。您显示的用于检查 context.auth
的代码应该可以正常工作。
关于javascript - Firebase 可调用函数 : Permission settings to restrict calling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62789382/