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

生产级Firebase项目基于会话认证的安全规则配置咨询

Firebase Firestore安全规则配置方案(自定义会话认证场景)

核心原则

Firebase安全规则是数据库的第一道防护墙,不能仅依赖后端权限校验就开放全读写权限——直接通过Firebase SDK发起的请求会绕过你的后端服务,必须在规则层同步做权限控制,和后端校验形成双层防护。

步骤1:将自定义会话绑定到Firebase认证

你的后端需要在验证Cookie中的userID合法性后,生成Firebase自定义认证令牌,前端用该令牌完成Firebase登录,这样Firestore规则就能通过request.auth.uid获取用户身份:

后端生成自定义令牌(Node.js示例)

const admin = require('firebase-admin');

// 验证Cookie中的userID有效后生成令牌
async function getFirebaseCustomToken(userId) {
  return admin.auth().createCustomToken(userId);
}

前端完成Firebase登录

import { getAuth, signInWithCustomToken } from "firebase/auth";

const auth = getAuth();
// 从后端获取customToken后登录
signInWithCustomToken(auth, customToken)
  .then(() => {
    // 后续Firestore请求会自动携带认证信息
  })
  .catch(err => {
    // 处理登录失败
  });

步骤2:配置Firestore安全规则

针对你的Users集合,设置最小权限原则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 全局默认:未认证用户禁止所有操作
    match /{document=**} {
      allow read, write: if false;
    }

    // Users集合权限控制
    match /Users/{userId} {
      // 仅认证用户可读写自己的文档
      allow read, write: if request.auth != null && request.auth.uid == userId;

      // (可选)如果后端服务需要全权限访问,可针对服务账号单独开放
      // allow read, write: if request.auth.token.email == 'your-service-account@your-project.iam.gserviceaccount.com';
    }
  }
}

步骤3:字段级权限加固(可选)

如果需要限制用户可修改的字段(比如禁止普通用户修改管理员标识),可以在write规则中添加字段校验:

match /Users/{userId} {
  allow write: if request.auth != null && request.auth.uid == userId
    // 仅允许修改指定字段
    && request.resource.data.keys().hasOnly(['username', 'email', 'avatar'])
    // 禁止修改管理员标识
    && request.resource.data.isAdmin == resource.data.isAdmin;
}

额外安全建议

  • 启用Firebase控制台的规则测试功能,模拟未认证用户、普通用户、服务账号等场景,验证规则是否生效;
  • 避免在规则中使用过于宽松的条件(如request.auth != null不做后续校验);
  • 后端使用Firebase Admin SDK操作数据库时,默认会绕过安全规则,确保服务账号密钥的安全存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:15:35