Firebase实时数据库模拟器带access_token时忽略规则?如何开启认证支持
问题解答:为Realtime Database模拟器开启正常认证支持
问题背景
当前Realtime Database模拟器存在以下行为:
- 所有带
access_token参数的REST请求(即使token无效,比如"foo")都会被当作管理员请求,完全跳过安全规则校验 - 已配置全局安全规则
.read和.write均为false,但带无效token的请求仍返回200 OK
解决方案:关联Firebase Auth模拟器
要让Realtime Database模拟器开启正常的认证校验,需将其与Firebase Auth模拟器联动,具体步骤如下:
1. 配置并启动Auth模拟器
方式一:命令行启动
启动模拟器时添加--auth-emulator-host参数,指定Auth模拟器地址:
firebase emulators:start --auth-emulator-host localhost:9099
方式二:通过firebase.json配置
在项目根目录的firebase.json中添加Auth模拟器配置,让Database自动关联:
{ "emulators": { "database": { "port": 9000 }, "auth": { "port": 9099 }, "ui": { "enabled": true } } }
配置完成后直接运行firebase emulators:start即可。
2. 使用合法认证Token测试
联动Auth模拟器后,Database模拟器会严格校验access_token的有效性:
- 先通过Auth模拟器创建测试用户(可通过模拟器UI或调用Firebase Auth客户端API完成)
- 获取该用户的有效ID Token,将其作为
access_token参数传入REST请求 - 此时模拟器会验证Token合法性,只有合法Token对应的用户才会进入安全规则校验环节,无效Token会被拒绝(返回401/403)
3. 验证效果
完成配置后再次测试:
- 不带
access_token的请求仍返回401 Unauthorized - 带无效Token(如"foo")的请求会被拒绝,不再返回
200 OK - 带合法用户Token的请求会按照配置的安全规则进行权限校验
原理说明
默认情况下,单独运行的Realtime Database模拟器会将任何带有access_token参数的请求视为管理员请求,这是为了简化快速测试流程。但当与Auth模拟器联动后,Database模拟器会委托Auth模拟器进行Token校验,从而启用真实的认证与权限控制逻辑。
内容的提问来源于stack exchange,提问作者Anthony Bobenrieth
相关产品推荐
相关产品推荐

