根据Firebase关于onCall
"可调用"函数的文档:
functions.https.onCall触发器自动反序列化请求主体并验证身份验证令牌。
此外,根据Firebase可调用函数协议规范:
如果请求中提供的身份验证令牌无效,则会以401 Unauthorized拒绝该请求,错误代码为UNAUTHENTICATED。
然而,我尝试过可以调用具有无效Authorization标头的函数,如Authorization: fooBar
或最坏情况,而不提供它:
curl -X POST --location https://my-test-app.cloudfunctions.net/hello -d "{data:{})"
函数按预期响应"Hello world!"
(http 200"ok"(
当然,在这种情况下context.auth
是未定义的,但它仍然被认为是有效的。
这是非常误导和危险的,因为开发人员可能认为他们的功能受到默认保护,但事实并非如此:任何人都可以公开调用它。
我知道默认的";AllUser";访问firebase部署函数上的凭据,但是文档令人困惑。
我是否错过了启用或配置以激活具体开箱即用令牌验证的任何内容?
对于可调用函数来说,缺少身份验证令牌从来都不是错误。所有可调用函数都被认为是可公开访问的。
如果你不想让函数完成它的工作,除非在请求中提供了有效的身份验证令牌,那么你只需要写几行代码来检查并尽早保释。它的代码实际上是在您链接的文档页面中提供的。
// Checking that the user is authenticated.
if (!context.auth) {
// Throwing an HttpsError so that the client gets the error details.
throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
'while authenticated.');
}
如果您觉得某些功能无法如文档中所述工作,请在GitHub上提交一份错误报告,并说明重现问题的步骤。