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

如何限制Cordova打包的Firebase应用API密钥访问权限?

针对Cordova+Firebase应用的API密钥权限限制方案

核心结论

虽然你的应用基于Web技术开发,但因为是Cordova打包成安卓原生容器,必须在谷歌云控制台选择「安卓应用」作为API密钥的访问限制类型——所有从应用发出的Firebase请求,最终会通过安卓容器携带应用的签名和包名信息,谷歌会验证这些信息是否匹配你配置的规则。

具体操作步骤

  1. 获取安卓应用的SHA-1指纹

    • 发布版:使用你签名APK的keystore文件,执行命令:
      keytool -list -v -keystore /path/to/your/release.keystore -alias your-keystore-alias
      
    • 调试版:使用默认调试keystore(路径一般为~/.android/debug.keystore),执行命令:
      keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
      

    记录输出中的SHA1指纹字符串。

  2. 配置谷歌云控制台的API密钥限制

    • 进入谷歌云控制台,找到对应Firebase项目的API密钥(可在Firebase控制台「项目设置」→「通用」→「Web应用」的配置中找到对应的API密钥)
    • 编辑该API密钥的访问限制:
      • 选择「安卓应用」选项
      • 点击「添加安卓应用」,输入你的应用包名(即Cordova config.xml中<widget>标签的id属性值,比如com.yourcompany.yourapp),以及刚才获取的SHA-1指纹
      • 调试版和发布版的SHA-1都要添加,避免调试时API请求被拦截
  3. 配合Firebase安全规则强化防护
    API密钥限制只是第一道防线,必须结合Firebase的安全规则防止合法用户滥用:

    • 强制用户认证:比如数据库规则要求request.auth != null才能读写
    • 细化权限:比如限制用户只能操作自己的数据,示例规则:
      rules_version = '2';
      service cloud.firestore {
        match /databases/{database}/documents {
          match /users/{userId} {
            allow read, write: if request.auth != null && request.auth.uid == userId;
          }
        }
      }
      
  4. 启用Firebase App Check(可选但推荐)
    App Check会进一步验证请求是否来自你的合法应用,针对Cordova安卓应用,可配置SafetyNet作为验证提供商:

    • 在Firebase控制台启用App Check,选择你的安卓应用
    • 按照指引配置SafetyNet,确保你的应用包名和SHA-1已在谷歌云控制台关联
    • 在Cordova代码中初始化App Check,验证请求合法性

关键注意事项

  • 即使APK被解压,他人获取到Firebase配置中的API密钥,也无法在其他环境(比如自己的Web应用、其他安卓应用)调用你的Firebase服务,因为请求缺少你的应用签名和包名,会被谷歌拦截
  • 不要仅依赖API密钥限制,必须结合用户认证和安全规则,形成多层防护

内容的提问来源于stack exchange,提问作者EMR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:52:18