Firestore数据库API密钥限制无效:如何仅允许特定Android应用访问?
解决Firestore仅允许特定Android应用访问的问题
为什么你之前的操作没用?
- API密钥仅用于标识Firebase项目,无法控制Firestore的资源访问权限。Google Cloud控制台的API密钥限制(比如指纹、网站类型)只是防止API配额被滥用,不能阻止通过合法验证的Firebase客户端SDK访问数据库。
- 哪怕替换了无效的API密钥,Firebase Android SDK初始化时会借助你在Firebase控制台绑定的应用包名和签名指纹自动完成身份验证,获取合法访问令牌,所以依然能正常读写Firestore。
正确实现方式:用Firestore安全规则验证应用身份
要仅允许指定Android应用访问,必须在Firestore安全规则中直接校验请求的应用包名和签名指纹。
步骤1:获取应用SHA-1指纹
你可以从Firebase控制台「项目设置」>「对应Android应用」下找到已添加的SHA-1指纹(格式为大写字母+冒号分隔,例如AA:BB:CC:...),也可以用keytool命令从签名文件生成。
步骤2:编写Firestore安全规则
在Firebase控制台「Firestore数据库」>「规则」标签下,替换为以下规则(将占位符换成你的包名和指纹):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 仅允许指定应用读写所有文档 match /{document=**} { allow read, write: if request.auth.token.android.appPackageName == "com.your.app.package" && request.auth.token.android.certFingerprint == "AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:QQ:RR:SS:TT"; } } }
发布规则后,只有匹配包名和指纹的Android应用能访问Firestore,其他来源的请求都会被拒绝。
注意事项
这是不依赖用户认证前提下最严格的限制,但仍存在风险:攻击者可能通过逆向工程获取你的包名和指纹伪造请求。若需更高安全性,建议结合匿名认证等轻量认证方式,在规则中同时验证用户身份与应用信息。
内容的提问来源于stack exchange,提问作者Nuno Feliciano
相关产品推荐
相关产品推荐

