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

调用Firebase AppCheck Google API验证Token时如何完成身份认证

解决Firebase AppCheck验证API的401未认证问题

调用https://firebaseappcheck.googleapis.com/v1beta/projects/{projectId}:verifyAppCheckToken端点需要服务端身份认证,你创建的OAuth 2.0 Client ID并不适用于这种场景——它是给用户端授权用的,服务端调用这类管理API应该用服务账号密钥来获取访问令牌。

下面是具体解决步骤:

1. 获取服务账号密钥

  • 打开Google Cloud Console,进入你的目标项目
  • 导航到「IAM与管理」→「服务账号」
  • 创建新服务账号(或选择已有账号),给它分配Firebase App Check Admin角色(该角色拥有验证AppCheck令牌的权限)
  • 点击目标服务账号→「密钥」→「添加密钥」→「创建新密钥」,选择JSON格式,下载密钥文件到本地

2. 在.NET中获取访问令牌

先安装必要的NuGet包:

Install-Package Google.Apis.Auth

用代码生成访问令牌:

using Google.Apis.Auth.OAuth2;
using System.Threading.Tasks;

public async Task<string> GetAccessTokenAsync(string serviceAccountKeyPath)
{
    var credential = GoogleCredential.FromFile(serviceAccountKeyPath)
        .CreateScoped("https://www.googleapis.com/auth/firebase.appcheck");
    
    var token = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
    return token;
}

3. 携带令牌调用验证API

不管用HttpClient还是官方SDK,都要在请求头中添加Authorization: Bearer {token}。

用HttpClient的示例:

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Newtonsoft.Json;
using System.Threading.Tasks;

public async Task<HttpResponseMessage> VerifyAppCheckTokenAsync(string projectId, string appCheckToken, string serviceAccountKeyPath)
{
    var accessToken = await GetAccessTokenAsync(serviceAccountKeyPath);
    var client = new HttpClient();
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    
    var requestBody = new { appCheckToken = appCheckToken };
    var content = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
    
    var url = $"https://firebaseappcheck.googleapis.com/v1beta/projects/{projectId}:verifyAppCheckToken";
    return await client.PostAsync(url, content);
}

用官方Firebase AppCheck SDK的示例(更简洁):

先安装SDK包:

Install-Package Google.Apis.FirebaseAppCheck.v1beta

调用代码:

using Google.Apis.FirebaseAppCheck.v1beta;
using Google.Apis.FirebaseAppCheck.v1beta.Data;
using Google.Apis.Services;
using System.Threading.Tasks;

public async Task<GoogleFirebaseAppcheckV1betaVerifyAppCheckTokenResponse> VerifyTokenWithSdkAsync(string projectId, string appCheckToken, string serviceAccountKeyPath)
{
    var credential = GoogleCredential.FromFile(serviceAccountKeyPath)
        .CreateScoped(FirebaseAppCheckService.Scope.FirebaseAppcheck);
    
    var service = new FirebaseAppCheckService(new BaseClientService.Initializer
    {
        HttpClientInitializer = credential
    });
    
    var request = new GoogleFirebaseAppcheckV1betaVerifyAppCheckTokenRequest
    {
        AppCheckToken = appCheckToken
    };
    
    return await service.Projects.VerifyAppCheckToken(request, $"projects/{projectId}").ExecuteAsync();
}

注意事项

  • 确保服务账号的角色权限配置正确,权限不足会返回403错误
  • 密钥文件需妥善保管,禁止提交到代码仓库
  • 访问令牌默认1小时过期,可缓存令牌减少重复请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:47:08