You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:14:53