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

如何在C# .NET API中自动获取FCM请求的Bearer Token并刷新

在.NET API中自动获取带FCM权限的OAuth2 Token(自动刷新)

核心依赖

先安装NuGet包:Google.Apis.Auth 或针对ASP.NET Core的 Google.Apis.Auth.AspNetCore3,这两个包会自动处理Token的获取与刷新逻辑。

步骤1:获取Firebase服务账号密钥

  1. 打开Firebase控制台进入你的项目
  2. 点击「设置」→「服务账号」
  3. 点击「生成新的私钥」,下载JSON格式密钥文件并保存到API项目中(注意不要提交到版本库)

步骤2:配置Token获取逻辑

方式1:ASP.NET Core依赖注入配置(推荐)

在Program.cs中添加服务配置:

using Google.Apis.Auth.OAuth2;
using System.Net.Http.Headers;

var builder = WebApplication.CreateBuilder(args);

// 配置Google服务账号凭据
builder.Services.AddSingleton<GoogleCredential>(sp =>
{
    // 替换为你的服务账号密钥文件路径
    var credentialPath = Path.Combine(AppContext.BaseDirectory, "firebase-service-account.json");
    return GoogleCredential.FromFile(credentialPath)
        .CreateScoped("https://www.googleapis.com/auth/firebase.messaging");
});

// 配置带自动Token注入的HttpClient
builder.Services.AddHttpClient("FcmClient", async (sp, client) =>
{
    client.BaseAddress = new Uri("https://fcm.googleapis.com/fcm/");
    var credential = sp.GetRequiredService<GoogleCredential>();
    // 自动获取Token,过期时自动刷新
    var token = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
});

var app = builder.Build();
// ... 其他中间件配置

方式2:直接在代码中获取Token(适合非Web项目)

如果是控制台或其他非Web项目,可使用以下代码:

using Google.Apis.Auth.OAuth2;

var credentialPath = "path/to/firebase-service-account.json";
var credential = GoogleCredential.FromFile(credentialPath)
    .CreateScoped("https://www.googleapis.com/auth/firebase.messaging");

// 获取Token(自动处理刷新,无需手动干预)
var accessToken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();

步骤3:发送FCM消息示例

使用配置好的HttpClient发送请求,无需手动管理Token:

using System.Text;
using Newtonsoft.Json;

public class FcmService
{
    private readonly HttpClient _fcmClient;

    public FcmService(IHttpClientFactory httpClientFactory)
    {
        _fcmClient = httpClientFactory.CreateClient("FcmClient");
    }

    public async Task SendFcmMessageAsync(string deviceToken, string title, string body)
    {
        var payload = new
        {
            to = deviceToken,
            notification = new
            {
                title = title,
                body = body
            }
        };

        var jsonPayload = JsonConvert.SerializeObject(payload);
        var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");

        var response = await _fcmClient.PostAsync("send", content);
        response.EnsureSuccessStatusCode();
    }
}

关键说明

  • GoogleCredential会自动缓存Token,过期前自动请求新Token,完全无需手动更新
  • 生产环境中通过环境变量或配置中心管理密钥文件路径,不要硬编码
  • 确保服务账号拥有「Firebase Cloud Messaging Admin」权限,否则会返回权限不足错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:59:54