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

调用Firebase Cloud Messaging POST接口时遭遇403 HTTP错误

解决FCM v1版本OAuth2调用403权限拒绝问题

我之前切换FCM版本时也踩过一模一样的坑——明明已经启用了FCM API,用OAuth2调用v1接口却一直返回403。结合我的排查经验,给你梳理几个容易被忽略的关键点:

  • 检查服务账号的权限配置
    这是最常见的问题根源。你使用的OAuth2服务账号必须拥有FCM消息发送的权限,最直接的方式是给它添加 Firebase Cloud Messaging Admin 角色:

    1. 打开Google Cloud控制台的IAM页面,找到对应的服务账号
    2. 点击编辑按钮,添加角色,搜索并选择「Firebase Cloud Messaging Admin」后保存
      注意:Viewer、Editor这类通用权限不一定包含FCM的发送权限,必须明确添加FCM相关的角色。
  • 验证OAuth2令牌的权限范围
    获取令牌时请求的scope必须是 https://www.googleapis.com/auth/firebase.messaging,如果scope不正确,哪怕令牌有效也会被拒绝。你可以用JWT解码工具查看令牌payload里的scope字段,确认是否包含这个值。

  • 确认项目关联与API状态同步
    虽然你说FCM API已启用,但要确认这个API是在服务账号所属的Google Cloud项目下启用的。有时候会不小心在不同项目间操作,导致API和服务账号不匹配。另外,也可以尝试先禁用再重新启用FCM API,避免控制台状态缓存导致的不同步问题。

  • 核对服务账号密钥文件的正确性
    Legacy API用的是服务器密钥,而v1版本依赖服务账号的JSON密钥文件。要确保你下载的密钥文件属于正确的服务账号,并且代码里正确加载了这个文件来生成OAuth2令牌——如果密钥文件不对,生成的令牌自然没有权限。

  • 用最小化示例测试排查
    可以先抛开业务代码,用curl做一个最简单的测试,排除代码逻辑的干扰:

    # 配置服务账号密钥路径
    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account.json"
    # 获取访问令牌
    ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    # 调用FCM v1接口发送测试消息
    curl -X POST "https://fcm.googleapis.com/v1/projects/[你的项目ID]/messages:send" \
      -H "Authorization: Bearer $ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "message": {
          "token": "[测试设备的FCM令牌]",
          "notification": {
            "title": "测试标题",
            "body": "测试内容"
          }
        }
      }'
    

    如果这个示例也返回403,那问题肯定出在权限或令牌配置上;如果能成功发送,再回头检查业务代码里的调用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:57