为什么Firebase onCall的授权验证效率低下



根据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上提交一份错误报告,并说明重现问题的步骤。

最新更新