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

使用自定义Auth Token调用Firebase实时数据库REST API返回未授权请求

问题排查与解决方案

核心问题:自定义Auth Token不能直接用于数据库请求

Admin SDK生成的自定义Auth Token并非实时数据库认可的有效访问凭证,它的作用是供客户端通过Firebase Auth的signInWithCustomToken接口交换为合法的ID Token。直接将自定义Token作为Bearer令牌发送,会因Token格式、受众不匹配导致验证失败,触发“未授权请求”。

具体排查与修复步骤

  • 修正Token使用流程:
    客户端必须先将自定义Token交换为ID Token,再用ID Token发起数据库请求:

    // Web客户端示例
    firebase.auth().signInWithCustomToken(customTokenFromServer)
      .then(userCredential => userCredential.user.getIdToken())
      .then(idToken => {
        fetch('https://<你的数据库ID>.firebaseio.com/actions.json', {
          headers: { 'Authorization': `Bearer ${idToken}` }
        });
      });
    
  • 理解安全规则与Token验证的优先级:
    即使安全规则设为.read: true,只要请求携带Authorization头,Firebase会优先验证Token有效性。若Token无效(比如直接使用自定义Token),会直接拒绝请求,不会触发公开访问规则。

  • 验证自定义Token的生成合法性:
    用JWT解码工具检查Token内容,确保:

    • aud字段为你的Firebase项目ID
    • uid为合法非空值
    • exp字段未过期
      生成Token的代码需符合规范:
    # Python Admin SDK示例
    import firebase_admin
    from firebase_admin import auth
    
    cred = firebase_admin.credentials.Certificate('service-account-key.json')
    firebase_admin.initialize_app(cred)
    
    # 必须指定合法uid
    custom_token = auth.create_custom_token('valid-user-uid')
    
  • 明确IAM角色的作用范围:
    Cloud Console中给服务账号配置的实时数据库管理员角色,仅适用于服务账号通过Admin SDK直接发起的服务器端操作,与客户端通过ID Token发起的请求无关。客户端请求的权限完全由Firebase安全规则控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:31:07