使用已弃用密钥通过REST API访问Firebase实时数据库的问题
Firebase实时数据库安全机制与Auth参数问题解答
一、自定义UserID替代Firebase ID Token的问题
这是错误的做法。Firebase的安全规则依赖经过Firebase认证系统签发的有效Token来识别用户身份,自定义的UserID无法被Firebase的安全机制验证,自然无法通过auth !== null的规则校验。
二、Auth参数的有效取值说明
- 你提到的数据库密钥(旧server key)确实已被弃用,虽暂时能生效,但风险极大——任何人拿到该密钥都可完全绕过所有安全规则,直接读写整个数据库,这也是它被弃用的核心原因。
- 你尝试的
access_token、serverAuthCode、authCode都不是Firebase实时数据库认可的Auth参数值:- 只有Firebase认证签发的ID Token(即你认为体积较大的那个)才是合法取值,它包含用户身份信息,能被Firebase安全规则解析出
auth对象。 - 若为后端服务调用,可使用Firebase Admin SDK生成的自定义Token,或直接通过Admin SDK操作数据库(无需在URL中添加auth参数)。
- 只有Firebase认证签发的ID Token(即你认为体积较大的那个)才是合法取值,它包含用户身份信息,能被Firebase安全规则解析出
三、当前安全规则的问题与优化方向
你当前的规则仅要求用户已认证,未限制用户只能访问自身数据。正确的规则应校验auth.uid与路径中的$uid一致:
{ "rules": { "samarkand": { "$uid": { ".read": "auth.uid === $uid", ".write": "auth.uid === $uid" } } } }
这样可确保每个用户仅能读写自己$uid路径下的数据,避免已认证用户越权访问他人数据。
四、你忽略的核心要点
- Firebase实时数据库的Auth参数仅接受Firebase官方签发的有效Token(ID Token或自定义Token),自定义字符串、其他类型的OAuth Token均不被认可。
- 旧数据库密钥会完全绕过安全规则,极度危险,必须立即停止使用,改用合法的认证Token。
- 安全规则不仅要验证用户是否已认证,还要验证用户是否拥有对应数据的访问权限(即
auth.uid与路径参数匹配)。
内容的提问来源于stack exchange,提问作者dmarques42
相关产品推荐
相关产品推荐

