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

如何不依赖Google Auth Library,用service-account.json调用Firebase HTTP v1 API

无需Google Auth Library,用服务账号直接调用Firebase Cloud Messaging HTTP v1 API

当然可以只用service-account-file.json的内容实现,你之前走的是面向用户的授权码流(需要同意页面),但服务账号应该用服务器到服务器的JWT签名流,完全不需要用户交互,自然绕开同意页面。

核心逻辑步骤

服务账号的认证本质是通过自己的私钥签名生成JWT,再用这个JWT换取访问令牌,之后就能调用FCM API。具体分四步:

  1. 提取服务账号关键信息
    从你的service-account-file.json里取出三个核心字段:

    • client_email:服务账号邮箱
    • private_key:RSA私钥(注意保留开头的-----BEGIN PRIVATE KEY-----和结尾的-----END PRIVATE KEY-----)
    • token_uri:固定为https://oauth2.googleapis.com/token(一般json里已经有)
  2. 构造JWT令牌
    JWT由三部分组成:头部、载荷、签名,用.拼接:

    • 头部:固定结构,声明签名算法
      {"alg": "RS256", "typ": "JWT"}
      
    • 载荷:包含认证必要信息,必须填以下字段:
      • iss:填client_email
      • scope:填https://www.googleapis.com/auth/firebase.messaging(FCM API的权限范围)
      • aud:填token_uri的值
      • exp:过期时间戳(当前时间+3600秒,最长不能超过3600秒)
      • iat:当前时间戳
    • 签名:用private_key对Base64URL(头部).Base64URL(载荷)进行RS256签名,结果再转成Base64URL格式
  3. 换取访问令牌
    向token_uri发送POST请求:

    • 请求头:Content-Type: application/x-www-form-urlencoded
    • 请求体:
      grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=你的完整JWT字符串
      

    成功响应会返回access_token(有效期1小时),后续调用FCM API就用这个令牌。

  4. 调用FCM HTTP v1 API发送通知
    向https://fcm.googleapis.com/v1/projects/你的项目ID/messages:send发送POST请求:

    • 请求头:
      Authorization: Bearer 你的access_token
      Content-Type: application/json
      
    • 请求体:按FCM v1要求构造消息内容,比如:
      {
        "message": {
          "token": "目标设备的FCM令牌",
          "notification": {
            "title": "测试通知",
            "body": "这是一条不用Auth Library的FCM通知"
          }
        }
      }
      

注意事项

  • JWT的Base64URL编码要去掉=填充,替换+为-、/为_
  • 私钥签名的时候要注意格式,不要去掉首尾的标识行,有些工具需要处理换行符(比如把\n转成实际换行)
  • 访问令牌过期后,重新用JWT换取即可,不需要重复走任何用户交互流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:40:36