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

如何通过纯REST调用获取OAuth2授权码以实现Firebase推送通知?

无需用户交互获取FCM OAuth2令牌的REST方案(Postman实现)

你要的纯REST无跳转获取令牌的方案,只能用Google服务账号的JWT授权流程——授权码流程必须依赖用户登录跳转,没法满足你的需求。以下是具体操作步骤:

1. 准备服务账号密钥

  • 登录Google Cloud控制台,找到你的Firebase关联项目
  • 进入「IAM与管理」→「服务账号」页面,创建或选择一个现有服务账号
  • 给该服务账号分配「Firebase Messaging Admin」角色(确保有发送FCM通知的权限)
  • 点击服务账号→「密钥」→「添加密钥」→「创建新密钥」,选择JSON格式,下载保存密钥文件

密钥文件里会包含client_email(服务账号邮箱)、private_key(用于签名的私钥)等核心信息,后面会用到。

2. 生成JWT令牌(Postman内完成)

JWT由Header、Payload、签名三部分组成,你可以在Postman的Pre-request Script里用代码生成,避免手动构造出错:

Postman脚本示例:

// 从密钥文件提取的信息
const clientEmail = "你的服务账号邮箱@xxx.iam.gserviceaccount.com";
const privateKey = `-----BEGIN PRIVATE KEY-----
你的私钥内容
-----END PRIVATE KEY-----`;
const scope = "https://www.googleapis.com/auth/firebase.messaging";

// 构造Header和Payload
const header = { alg: "RS256", typ: "JWT" };
const now = Math.floor(Date.now() / 1000);
const payload = {
  iss: clientEmail,
  scope: scope,
  aud: "https://oauth2.googleapis.com/token",
  exp: now + 3600, // 1小时过期
  iat: now
};

// 编码Header和Payload为Base64URL格式
function base64urlEncode(str) {
  return btoa(JSON.stringify(str))
    .replace(/\+/g, "-")
    .replace(/\//g, "_")
    .replace(/=+$/, "");
}

const encodedHeader = base64urlEncode(header);
const encodedPayload = base64urlEncode(payload);

// 用私钥签名生成JWT
const signature = pm.crypto.rsa.sign(encodedHeader + "." + encodedPayload, privateKey, "SHA-256");
const jwt = encodedHeader + "." + encodedPayload + "." + signature;

// 把JWT存入Postman变量,供后续请求调用
pm.variables.set("jwt_token", jwt);

3. 请求获取访问令牌

  • 新建Postman请求,方法为POST,URL为https://oauth2.googleapis.com/token
  • 请求体选择x-www-form-urlencoded,添加以下参数:
    • grant_type:值为urn:ietf:params:oauth:grant-type:jwt-bearer
    • assertion:值为{{jwt_token}}(刚才脚本生成的JWT变量)
  • 发送请求,响应会返回access_token,这就是调用FCM API需要的OAuth2令牌

4. 调用FCM发送通知

  • 新建Postman请求,方法POST,URL为https://fcm.googleapis.com/v1/projects/你的项目ID/messages:send
  • 请求头添加Authorization: Bearer {{access_token}}(把上一步拿到的令牌存入Postman变量)
  • 请求体选择raw→JSON,填入FCM消息格式,示例:
{
  "message": {
    "token": "目标设备的推送令牌",
    "notification": {
      "title": "测试通知",
      "body": "这是一条通过REST调用发送的FCM通知"
    }
  }
}

发送请求即可完成推送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:01:34