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

将IDP与Database分离:基于Firebase的用户数据交互方案咨询

问题描述

我正尝试搭建一套配置:由身份提供商(IDP)完成用户认证后,若用户未在数据库中则即时将其配置到库内,若已存在则返回关联数据。我使用Firebase作为数据库,目前应用前端已实现IDP认证功能,但不想使用Firebase Authentication,希望在用户登录后安全地从Firebase获取用户数据,请问有什么合适的实现方案?

更新:我最终选择了另一种方案,使用Firebase Auth结合Google认证,并通过hosted domain(hd)参数限制仅允许特定组织的Google账户进行认证。我知道这并非通用方案,但符合我的需求。

可行实现方案

如果不想依赖Firebase Auth,可通过以下几种方式实现安全的Firebase数据库访问:

方案一:自定义JWT验证 + Firebase安全规则

  • 从IDP获取用户JWT令牌,确保令牌包含唯一用户标识(如邮箱、用户ID)
  • 借助Cloud Functions编写验证函数:接收前端传来的JWT,调用IDP官方接口验证令牌有效性,返回用户唯一标识
  • 配置Firebase数据库安全规则,仅允许验证通过的用户访问自身数据:
    // Firestore示例规则
    match /users/{userId} {
      allow read, write: if request.auth.uid == userId;
    }
    
  • 前端拿到IDP的JWT后,调用上述Cloud Functions接口获取Firebase访问凭证,再用凭证执行数据库操作
  • 数据处理逻辑:查询users集合中对应用户标识的文档,不存在则创建新文档写入基础信息,存在则直接返回文档数据

方案二:IDP令牌直接验证 + 安全规则

  • 部分主流IDP(如Google、Auth0)的JWT可直接被Firebase安全规则验证
  • 配置安全规则,直接校验IDP JWT的签名与核心声明:
    // 验证Google ID Token示例
    match /users/{userId} {
      allow read, write: if 
        request.token.email_verified == true &&
        request.token.email == userId;
    }
    
  • 前端将IDP获取的JWT直接作为身份凭证传入数据库操作,规则会自动完成令牌合法性校验
  • 同样遵循“查询-不存在则创建-存在则返回”的逻辑处理用户数据

方案三:后端代理数据库访问

  • 所有Firebase数据库请求均通过你的后端服务中转
  • 前端登录IDP后,将令牌传给后端,后端验证令牌有效性后,使用Firebase Admin SDK访问数据库
  • 后端统一处理用户数据的创建、查询逻辑,再将结果返回前端
  • 此模式下,Firebase数据库安全规则可设置为仅允许Admin SDK访问,所有权限控制由你的后端实现
方案补充

你最终选用的Firebase Auth + Google认证+hd参数限制方案,在特定场景下非常高效——通过hd参数直接限定企业域账户,结合Firebase Auth的原生集成,省去了自定义验证的开发成本,很适合内部系统或特定组织用户的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:00:19