我已经在nodejs和python中编写了一些可调用的函数,当从客户端代码调用时,它们都可以正常工作。但是,这些可调用函数的Cloud Functions Invoker
的当前权限设置为allUsers
。删除allUsers
将导致函数抛出UNAUTHENTICATED
。
我希望这些可调用函数只能从我的firebase应用程序中调用,但我从这篇文章中了解到,这样的限制是不可能的。那么,限制/限制可调用函数只能从经过身份验证的用户调用以维护安全性的最佳做法是什么呢?
我已经做了必要的身份验证检查(我希望这些就足够了(,以确保他们是我的应用程序上经过身份验证的用户,即:
//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
?
那么,限制/限制可调用函数只能从经过身份验证的用户调用以维护安全性的最佳做法是什么?
您无法阻止任何客户端调用该函数(当您允许"allUsers"时,HTTP端点总是公共的(,因此您必须在函数内部检查客户端是否提供了身份验证凭据。您显示的检查context.auth
的代码应该可以正常工作。