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

如何获取Firebase HTTP V1 Access Token并延长其有效期?

FCM HTTP V1 Access Token 有效期延长及获取方法

问题背景

我目前用Python通过Firebase Admin SDK获取FCM的Access Token,代码如下:

import firebase_admin
from firebase_admin import credentials

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

代码运行正常,但发现Access Token有效期仅为1天,想知道怎么延长有效期,同时需要获取请求授权头里的Bearer token,示例请求如下:

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
   "message":{
      "token":"token_1",
      "data":{},
      "notification":{
        "title":"FCM Message",
        "body":"This is an FCM notification message!",
      }
   }
}

解决方案

首先明确:FCM HTTP V1 API使用的OAuth 2.0 Access Token无法手动延长有效期,Google设定的有效期是1小时(你说的1天应该是误解,Admin SDK自动管理的令牌实际有效期为1小时,到期会自动刷新)。

1. 借助Admin SDK自动管理令牌(推荐)

如果用Firebase Admin SDK发送FCM消息,完全不需要手动处理Token——SDK会自动完成令牌的获取、缓存和到期刷新,直接调用消息发送接口即可:

from firebase_admin import messaging

def send_fcm_notification():
    # 构造消息
    message = messaging.Message(
        notification=messaging.Notification(
            title="FCM Message",
            body="This is an FCM notification message!"
        ),
        token="token_1"
    )
    # 发送消息
    response = messaging.send(message)
    print(f"消息发送成功,响应ID: {response}")

这种方式下,你完全不用关心令牌有效期的问题,SDK会帮你搞定一切。

2. 手动生成并刷新令牌(仅需直接调用HTTP API时使用)

如果必须直接调用FCM HTTP V1 API,需要用服务账号密钥生成短期Token,步骤如下:

  • 使用google-auth库生成令牌,有效期最长1小时(Google安全限制,无法延长):
from google.oauth2 import service_account
import requests

# 加载服务账号密钥
credentials = service_account.Credentials.from_service_account_file(
    "path/to/serviceAccountKey.json",
    scopes=["https://www.googleapis.com/auth/firebase.messaging"]
)

# 获取或刷新AccessToken
if credentials.expired:
    credentials.refresh(requests.Request())
access_token = credentials.token

# 构造请求发送消息
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}
payload = {
    "message": {
        "token": "token_1",
        "notification": {
            "title": "FCM Message",
            "body": "This is an FCM notification message!"
        }
    }
}
response = requests.post(
    "https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send",
    json=payload,
    headers=headers
)
print(response.json())

注意:手动生成的令牌到期后必须重新刷新,无法延长到1天或更久——这是Google的安全机制,短期令牌能降低密钥泄露带来的风险。

误解澄清

你提到的“有效期1天”大概率是混淆了服务账号密钥和Access Token:服务账号密钥本身是长期有效的(除非手动吊销),但用它生成的Access Token是短期的(1小时)。Admin SDK内部会自动用服务账号密钥定期刷新Access Token,所以你无需手动干预。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:41