如何移除Firebase Gen 2 HTTP onRequest函数的“允许未认证访问”设置?
Firebase Gen 2 HTTP onRequest函数禁用未认证访问的解决方案
用gcloud部署Cloud Functions时,--no-allow-unauthenticated参数能直接禁止未认证访问,但这个参数在Firebase部署命令里无效,比如执行firebase deploy --only functions --no-allow-unauthenticated根本没用。现在Firebase Gen 2版本的HTTP onRequest函数,部署后默认会设为“允许未认证访问”状态,确实有安全隐患。而且Gen 2不像Gen 1那样能直接移除allUsers角色,得换下面的方法处理:
一、部署时直接禁用未认证访问
方法1:通过firebase.json配置权限
直接编辑项目根目录的firebase.json,在functions节点里添加"invoker": [],这样部署时就不会自动开放未认证访问。示例配置如下:
{ "functions": [ { "source": "functions", "codebase": "default", "ignore": [ "node_modules", ".git", "firebase-debug.log", "firebase-debug.*.log" ], "invoker": [] } ] }
配置好后执行firebase deploy --only functions就行。
方法2:部署后用gcloud命令快速修正
先正常部署函数:firebase deploy --only functions,然后用gcloud命令移除公共访问权限,命令格式如下(替换成自己的函数名和地域):
gcloud functions add-iam-policy-binding YOUR_FUNCTION_NAME \ --region=YOUR_REGION \ --member=allUsers \ --role=roles/cloudfunctions.invoker \ --remove
二、部署后通过控制台手动修改
- 打开Firebase控制台,进入目标项目
- 切换到「函数」页面,找到要修改的Gen 2函数
- 点击函数名称进入详情页,切换到「权限」标签
- 在成员列表里找到「所有用户」(对应allUsers)的条目,点击右侧删除按钮即可
注意:Gen 2函数控制台显示的“允许未认证访问”状态可能有延迟,只要移除了allUsers的invoker权限,未认证请求就会被拒绝,修改后可以发个未认证请求测试下是否生效。
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

