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

如何在Firebase GetAccessToken及C# Google API令牌请求中设置代理

在C#中为Firebase/Google APIs令牌请求配置代理

我来帮你搞定这个代理配置的问题,针对你遇到的Firebase GetAccessToken和Google APIs令牌请求报错的情况,下面是具体的实现方案:

核心思路

Google的认证SDK(包括Firebase依赖的Google.Apis.Auth库)允许我们自定义HttpClient实例,所以我们只需要先创建一个带有代理配置的HttpClient,再把它绑定到认证凭证对象上,就能解决请求发送失败的问题。

具体实现步骤

1. 创建带代理的HttpClientHandler和HttpClient

首先定义代理服务器的信息,包括地址、端口(如果需要认证还要加上用户名密码),然后构建HttpClientHandler和HttpClient:

// 配置代理信息
var proxyServer = "http://your-proxy-address:your-proxy-port";
var proxy = new WebProxy(proxyServer)
{
    // 如果代理需要用户名密码认证,取消下面注释并填写信息
    // Credentials = new NetworkCredential("proxy-username", "proxy-password")
};

// 创建带代理的HttpClientHandler
var httpClientHandler = new HttpClientHandler
{
    Proxy = proxy,
    UseProxy = true
};

// 基于handler创建HttpClient
var customHttpClient = new HttpClient(httpClientHandler);

2. 将自定义HttpClient绑定到认证凭证

场景1:直接使用ServiceAccountCredential获取AccessToken

如果你是直接用服务账号凭证来获取令牌(比如用于推送通知),可以这样做:

// 初始化服务账号凭证
var credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer("your-service-account-email@your-project.iam.gserviceaccount.com")
    {
        // 推送通知需要的scope,根据你的需求调整
        Scopes = new[] { "https://www.googleapis.com/auth/firebase.messaging" }
    }.FromPrivateKey("your-service-account-private-key"));

// 将自定义HttpClient赋值给凭证
credential.HttpClient = customHttpClient;

// 尝试获取AccessToken
try
{
    var accessToken = await credential.GetAccessTokenForRequestAsync();
    Console.WriteLine($"成功获取AccessToken: {accessToken}");
}
catch (Exception ex)
{
    Console.WriteLine($"获取令牌失败:{ex.Message}");
}

场景2:使用Firebase Admin SDK时配置代理

如果你是通过FirebaseAdmin SDK来操作(比如发送推送通知),可以通过自定义IHttpClientFactory来注入带代理的HttpClient:

// 先创建自定义的HttpClientFactory
public class ProxyHttpClientFactory : IHttpClientFactory
{
    private readonly HttpClientHandler _handler;

    public ProxyHttpClientFactory(HttpClientHandler handler)
    {
        _handler = handler;
    }

    public HttpClient CreateHttpClient()
    {
        return new HttpClient(_handler);
    }
}

// 初始化FirebaseApp时配置代理
var firebaseOptions = new AppOptions
{
    Credential = GoogleCredential.FromFile("path-to-your-service-account.json"),
    // 注入我们的代理HttpClientFactory
    HttpClientFactory = new ProxyHttpClientFactory(httpClientHandler)
};

// 创建FirebaseApp实例
FirebaseApp.Create(firebaseOptions);

注意事项

  • 确保你的代理服务器允许访问Google的认证端点:https://oauth2.googleapis.com/token,否则请求还是会失败。
  • 如果代理不需要认证,直接去掉Credentials的配置即可。
  • 报错An error occurred while sending the request通常是因为请求无法通过代理到达Google服务器,检查代理地址、端口是否正确,以及代理是否允许对外访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:21:34