为啥云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制]

Posted

技术标签:

【中文标题】为啥云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制]【英文标题】:Why Cloud function URL (Firebase) is publicly accessible? How to restrict access to specific external call? [duplicate]为什么云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制] 【发布时间】:2019-10-10 02:09:19 【问题描述】:

我使用 Firebase 来发送推送通知,使用 Firestore 数据库来存储用户信息和通知发送,以及一个与外部 API 调用交互以执行任务的云功能。

一切都很好......很好......

事实上,当我在没有经过身份验证的情况下调用云函数 URL 时,它可以工作。最糟糕的是:当我在 Google 上输入云函数 URL 时,它可以工作并返回我的 Firestore 数据库的元素!

所以 URL cloud 函数是 PUBLIC,如果有人找到 URL cloud 函数,他就可以访问 Firestore 数据库并可以在其中读写。

我在互联网上查看了所有限制对云功能 URL 的访问的可能性,仅限于可以使用但没有任何吸引力的用户。

有人可以帮我找到解决这个关键问题的合适方法吗?

希望这篇文章对未来的人有所帮助

谢谢

【问题讨论】:

【参考方案1】:

您将在官方 Cloud Function Samples 列表中找到有关如何“将 HTTPS 函数限制为仅限您应用的 Firebase 用户”的示例。

请看这里: https://github.com/firebase/functions-samples/tree/master/authorized-https-endpoint


另一种可能性是将您的 HTTP 云函数转换为 Callable 之一。如文档中所述,“使用可调用对象、Firebase 身份验证和 FCM 令牌(如果可用)会自动包含在请求中。”

但是,这只有在您从您的应用程序调用云函数时才有意义。如果您必须通过它的 URL(如“标准”REST API)调用它,这不会让事情变得更容易。

【讨论】:

感谢您的回复,我将对其进行测试并分享它是否有效。但是,是否有一种简单的方法,例如将角色分配给云功能以将其限制为 IAM 用户? “但是,是否有一种简单的方法,例如为云功能分配角色以将其限制为 IAM 用户”。据我所知,答案是否定的。示例中说明了将访问权限仅限于经过身份验证的 HTTP Cloud Functions 用户的方法。 感谢您的回答和您的时间 Renaud

以上是关于为啥云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用异步函数“getDownloadURL”来获取 Firebase 存储中的文件 URL

如何在 firebase 托管的 webapp 中获取 firebase 函数 URL?

将 Firebase 存储下载 URL 推送到 Firebase 云 Firestore

通过 Firebase 从 Android 调用云函数

向 Firebase https onRequest 云函数发送 webhook 请求得到 403 响应

为啥即使不是公开的,我也能读、写firestore?